-
[2018 KAKAO BLIND RECRUITMENT] [1์ฐจ] ๋ด์ค ํด๋ฌ์คํฐ๋ง - level2๊ณต๋ถ/์๊ณ ๋ฆฌ์ฆ 2022. 12. 6. 17:16728x90
๐๋ฌธ์ ์ค๋ช
์ฌ๋ฌ ์ธ๋ก ์ฌ์์ ์์์ง๋ ๋ด์ค, ํนํ ์๋ณด์ฑ ๋ด์ค๋ฅผ ๋ณด๋ฉด ๋น์ท๋น์ทํ ์ ๋ชฉ์ ๊ธฐ์ฌ๊ฐ ๋ง์ ์ ์ ํ์ํ ๊ธฐ์ฌ๋ฅผ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๋ค. Daum ๋ด์ค์ ๊ฐ๋ฐ ์ ๋ฌด๋ฅผ ๋งก๊ฒ ๋ ์ ์ ์ฌ์ ํ๋ธ๋ ์ฌ์ฉ์๋ค์ด ํธ๋ฆฌํ๊ฒ ๋ค์ํ ๋ด์ค๋ฅผ ์ฐพ์๋ณผ ์ ์๋๋ก ๋ฌธ์ ์ ์ ๊ฐ์ ํ๋ ์ ๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค.
๊ฐ๋ฐ์ ๋ฐฉํฅ์ ์ก๊ธฐ ์ํด ํ๋ธ๋ ์ฐ์ ์ต๊ทผ ํ์ ๊ฐ ๋๊ณ ์๋ "์นด์นด์ค ์ ์ ๊ฐ๋ฐ์ ๊ณต์ฑ" ๊ด๋ จ ๊ธฐ์ฌ๋ฅผ ๊ฒ์ํด๋ณด์๋ค.
- ์นด์นด์ค ์ฒซ ๊ณต์ฑ..'๋ธ๋ผ์ธ๋' ๋ฐฉ์ ์ฑ์ฉ
- ์นด์นด์ค, ํฉ๋ณ ํ ์ฒซ ๊ณต์ฑ.. ๋ธ๋ผ์ธ๋ ์ ํ์ผ๋ก ๊ฐ๋ฐ์ ์ฑ์ฉ
- ์นด์นด์ค, ๋ธ๋ผ์ธ๋ ์ ํ์ผ๋ก ์ ์ ๊ฐ๋ฐ์ ๊ณต์ฑ
- ์นด์นด์ค ๊ณต์ฑ, ์ ์ ๊ฐ๋ฐ์ ์ฝ๋ฉ ๋ฅ๋ ฅ๋ง ๋ณธ๋ค
- ์นด์นด์ค, ์ ์ ๊ณต์ฑ.. "์ฝ๋ฉ ์ค๋ ฅ๋ง ๋ณธ๋ค"
- ์นด์นด์ค "์ฝ๋ฉ ๋ฅ๋ ฅ๋ง์ผ๋ก 2018 ์ ์ ๊ฐ๋ฐ์ ๋ฝ๋๋ค"
๊ธฐ์ฌ์ ์ ๋ชฉ์ ๊ธฐ์ค์ผ๋ก "๋ธ๋ผ์ธ๋ ์ ํ"์ ์ฃผ๋ชฉํ๋ ๊ธฐ์ฌ์ "์ฝ๋ฉ ํ ์คํธ"์ ์ฃผ๋ชฉํ๋ ๊ธฐ์ฌ๋ก ๋๋๋ ๊ฑธ ๋ฐ๊ฒฌํ๋ค. ํ๋ธ๋ ์ด๋ค์ ๊ฐ๊ฐ ๋ฌถ์ด์ ๋ณด์ฌ์ฃผ๋ฉด ์นด์นด์ค ๊ณต์ฑ ๊ด๋ จ ๊ธฐ์ฌ๋ฅผ ์ฐพ์๋ณด๋ ์ฌ์ฉ์์๊ฒ ์ ์ฉํ ๋ฏ์ถ์๋ค.
์ ์ฌํ ๊ธฐ์ฌ๋ฅผ ๋ฌถ๋ ๊ธฐ์ค์ ์ ํ๊ธฐ ์ํด์ ๋ ผ๋ฌธ๊ณผ ์๋ฃ๋ฅผ ์กฐ์ฌํ๋ ํ๋ธ๋ "์์นด๋ ์ ์ฌ๋"๋ผ๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋๋ค.
์์นด๋ ์ ์ฌ๋๋ ์งํฉ ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ฒ์ฌํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ ์ค์ ํ๋๋ก ์๋ ค์ ธ ์๋ค. ๋ ์งํฉ A, B ์ฌ์ด์ ์์นด๋ ์ ์ฌ๋ J(A, B)๋ ๋ ์งํฉ์ ๊ต์งํฉ ํฌ๊ธฐ๋ฅผ ๋ ์งํฉ์ ํฉ์งํฉ ํฌ๊ธฐ๋ก ๋๋ ๊ฐ์ผ๋ก ์ ์๋๋ค.
์๋ฅผ ๋ค์ด ์งํฉ A = {1, 2, 3}, ์งํฉ B = {2, 3, 4}๋ผ๊ณ ํ ๋, ๊ต์งํฉ A ∩ B = {2, 3}, ํฉ์งํฉ A ∪ B = {1, 2, 3, 4}์ด ๋๋ฏ๋ก, ์งํฉ A, B ์ฌ์ด์ ์์นด๋ ์ ์ฌ๋ J(A, B) = 2/4 = 0.5๊ฐ ๋๋ค. ์งํฉ A์ ์งํฉ B๊ฐ ๋ชจ๋ ๊ณต์งํฉ์ผ ๊ฒฝ์ฐ์๋ ๋๋์ ์ด ์ ์๋์ง ์์ผ๋ ๋ฐ๋ก J(A, B) = 1๋ก ์ ์ํ๋ค.
์์นด๋ ์ ์ฌ๋๋ ์์์ ์ค๋ณต์ ํ์ฉํ๋ ๋ค์ค์งํฉ์ ๋ํด์ ํ์ฅํ ์ ์๋ค. ๋ค์ค์งํฉ A๋ ์์ "1"์ 3๊ฐ ๊ฐ์ง๊ณ ์๊ณ , ๋ค์ค์งํฉ B๋ ์์ "1"์ 5๊ฐ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ์. ์ด ๋ค์ค์งํฉ์ ๊ต์งํฉ A ∩ B๋ ์์ "1"์ min(3, 5)์ธ 3๊ฐ, ํฉ์งํฉ A ∪ B๋ ์์ "1"์ max(3, 5)์ธ 5๊ฐ ๊ฐ์ง๊ฒ ๋๋ค. ๋ค์ค์งํฉ A = {1, 1, 2, 2, 3}, ๋ค์ค์งํฉ B = {1, 2, 2, 4, 5}๋ผ๊ณ ํ๋ฉด, ๊ต์งํฉ A ∩ B = {1, 2, 2}, ํฉ์งํฉ A ∪ B = {1, 1, 2, 2, 3, 4, 5}๊ฐ ๋๋ฏ๋ก, ์์นด๋ ์ ์ฌ๋ J(A, B) = 3/7, ์ฝ 0.42๊ฐ ๋๋ค.
์ด๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์์ด ์ฌ์ด์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋๋ฐ ์ด์ฉํ ์ ์๋ค. ๋ฌธ์์ด "FRANCE"์ "FRENCH"๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ๋ ๊ธ์์ฉ ๋์ด์ ๋ค์ค์งํฉ์ ๋ง๋ค ์ ์๋ค. ๊ฐ๊ฐ {FR, RA, AN, NC, CE}, {FR, RE, EN, NC, CH}๊ฐ ๋๋ฉฐ, ๊ต์งํฉ์ {FR, NC}, ํฉ์งํฉ์ {FR, RA, AN, NC, CE, RE, EN, CH}๊ฐ ๋๋ฏ๋ก, ๋ ๋ฌธ์์ด ์ฌ์ด์ ์์นด๋ ์ ์ฌ๋ J("FRANCE", "FRENCH") = 2/8 = 0.25๊ฐ ๋๋ค.
์ ๋ ฅ ํ์
- ์ ๋ ฅ์ผ๋ก๋ str1๊ณผ str2์ ๋ ๋ฌธ์์ด์ด ๋ค์ด์จ๋ค. ๊ฐ ๋ฌธ์์ด์ ๊ธธ์ด๋ 2 ์ด์, 1,000 ์ดํ์ด๋ค.
- ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ๋ฌธ์์ด์ ๋ ๊ธ์์ฉ ๋์ด์ ๋ค์ค์งํฉ์ ์์๋ก ๋ง๋ ๋ค. ์ด๋ ์๋ฌธ์๋ก ๋ ๊ธ์ ์๋ง ์ ํจํ๊ณ , ๊ธฐํ ๊ณต๋ฐฑ์ด๋ ์ซ์, ํน์ ๋ฌธ์๊ฐ ๋ค์ด์๋ ๊ฒฝ์ฐ๋ ๊ทธ ๊ธ์ ์์ ๋ฒ๋ฆฐ๋ค. ์๋ฅผ ๋ค์ด "ab+"๊ฐ ์ ๋ ฅ์ผ๋ก ๋ค์ด์ค๋ฉด, "ab"๋ง ๋ค์ค์งํฉ์ ์์๋ก ์ผ๊ณ , "b+"๋ ๋ฒ๋ฆฐ๋ค.
- ๋ค์ค์งํฉ ์์ ์ฌ์ด๋ฅผ ๋น๊ตํ ๋, ๋๋ฌธ์์ ์๋ฌธ์์ ์ฐจ์ด๋ ๋ฌด์ํ๋ค. "AB"์ "Ab", "ab"๋ ๊ฐ์ ์์๋ก ์ทจ๊ธํ๋ค.
์ถ๋ ฅ ํ์
์ ๋ ฅ์ผ๋ก ๋ค์ด์จ ๋ ๋ฌธ์์ด์ ์์นด๋ ์ ์ฌ๋๋ฅผ ์ถ๋ ฅํ๋ค. ์ ์ฌ๋ ๊ฐ์ 0์์ 1 ์ฌ์ด์ ์ค์์ด๋ฏ๋ก, ์ด๋ฅผ ๋ค๋ฃจ๊ธฐ ์ฝ๋๋ก 65536์ ๊ณฑํ ํ์ ์์์ ์๋๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ ์๋ถ๋ง ์ถ๋ ฅํ๋ค.
์์ ์ ์ถ๋ ฅ
str1 str2 answer FRANCE french 16384 handshake shake hands 65536 aa1+aa2 AAAA12 43690 E=M*C^2 e=m*c^2 65536 ๐ ์ฒ์ ์๊ฐํ ์์ด๋์ด
1. ์ฐ์ ๋ค์ค ์งํฉ์ ๋ ๊ธ์์ฉ ๋์ด ArrayList์ ์ ์ฅํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ์ ํจ ๋ฌธ์๋ง ์ ํํ ์ ์ฅํด์ผ ํ๋ค.
2. ๊ต์งํฉ๊ณผ ํฉ์งํฉ์ ๊ตฌํ๋ค.
3. (๊ต์งํฉ / ํฉ์งํฉ) * 65536์ ์ ์๋ถ == ์์นด๋ ์ ์ฌ๋๋ฅผ ๊ตฌํ๋ค.
์์๊ฐ ์ค๋ณต๋๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ str1, str2๋ฅผ ๊ฐ๊ฐ ArrayList์ ์ ์ฅํด์ฃผ๊ณ
๊ทธ ๋ ๊ฐ์ ArrayList๋ฅผ ๋น๊ตํ๋ค.
1. arr2์ arr1์ ์์๊ฐ ํฌํจ๋๋ค๋ฉด arr2์์ ํด๋น ์์ ์ญ์ ํ๋ฉฐ ๊ต์งํฉ count +1.
2. 1๋ฒ ์ฐ์ฐ์ด ๋๋๋ฉด arr2์๋ arr1๊ณผ ๊ฒน์น์ง ์๋ ์์๋ค์ด ๋จ๊ฑฐ๋, ๋น ๋ฆฌ์คํธ๊ฐ ๋ ์ ์๋ค.
3. ํฉ์งํฉ count = arr1์ ํฌ๊ธฐ + arr2์ ํฌ๊ธฐ๊ฐ ๋๋ค.
โ๏ธ ์์ฑํ ์ฝ๋
import java.util.*; class Solution { public int solution(String str1, String str2) { int answer = 0; ArrayList<String> arrlist = new ArrayList<>(); ArrayList<String> arrlist2 = new ArrayList<>(); int intersection = 0; // ๊ต์งํฉ์ ์ int union = 0; //ํฉ์งํฉ์ ์ // 1. ๋ชจ๋ ๋๋ฌธ์๋ก str1 = str1.toUpperCase(); str2 = str2.toUpperCase(); // ์์ ๋๊ฐ์ ๋ฌธ์์ด์ด๋ฉด ์์นด๋ = 1 if(str1.equals(str2)) { return 65536; } // 2. str1 2๊ธ์์ฉ ๋ถ๋ฆฌํ arrlist ์ ์ฅ for(int i =0;i<str1.length()-1;i++) { String temp = str1.substring(i,i+2); boolean flag = isAlphabet(temp); if(flag) arrlist.add(temp); } // 3. str2 2๊ธ์์ฉ ๋ถ๋ฆฌํ arrlist2 ์ ์ฅ for(int i =0;i<str2.length()-1;i++) { String temp = str2.substring(i,i+2); boolean flag = isAlphabet(temp); if(flag) arrlist2.add(temp); } // 4. ํฉ์งํฉ ๊ต์งํฉ ๊ฒ์ฌ // ํฉ์งํฉ : A+B - (A์ B์ ๊ต์งํฉ) // ๊ต์งํฉ : A B ๋๋ค ์ค๋ณต๋๋ ๊ฐ count for(int i=0;i<arrlist.size();i++) { if(arrlist2.remove(arrlist.get(i))) { intersection++; } } union = arrlist2.size() + arrlist.size(); answer = 65536*intersection / union; return answer; } // ์ ํจ๋ฌธ์์ด์ธ์ง ๊ฒ์ฌ boolean isAlphabet(String temp) { boolean flag = false; for(int j =0;j<temp.length();j++) { if(temp.charAt(j)>='A' && temp.charAt(j)<='Z') { flag= true; } else { flag= false; break; }; } return flag; } } /* ์ฑ์ ์ ์์ํฉ๋๋ค. ์ ํ์ฑ ํ ์คํธ ํ ์คํธ 1 ใ ํต๊ณผ (0.04ms, 77.4MB) ํ ์คํธ 2 ใ ํต๊ณผ (0.06ms, 76.9MB) ํ ์คํธ 3 ใ ํต๊ณผ (0.07ms, 71.6MB) ํ ์คํธ 4 ใ ํต๊ณผ (1.41ms, 74.9MB) ํ ์คํธ 5 ใ ํต๊ณผ (0.05ms, 66MB) ํ ์คํธ 6 ใ ํต๊ณผ (0.04ms, 74MB) ํ ์คํธ 7 ใ ํต๊ณผ (0.26ms, 73MB) ํ ์คํธ 8 ใ ํต๊ณผ (0.05ms, 76.1MB) ํ ์คํธ 9 ใ ํต๊ณผ (0.18ms, 80.9MB) ํ ์คํธ 10 ใ ํต๊ณผ (0.65ms, 76MB) ํ ์คํธ 11 ใ ํต๊ณผ (0.79ms, 74.1MB) ํ ์คํธ 12 ใ ํต๊ณผ (0.05ms, 75.7MB) ํ ์คํธ 13 ใ ํต๊ณผ (0.18ms, 75.1MB) ์ฑ์ ๊ฒฐ๊ณผ ์ ํ์ฑ: 100.0 ํฉ๊ณ: 100.0 / 100.0 */๐ ์๊ฒ ๋ ์
list.remove() ์ฐ์ฐ์ ๋ฐํ ํ์ ์ boolean์ด์๊ตฌ๋..!
ํฌ๋กค๋งํ๊ฒ ๋๋ค๋ฉด ์ ์ฉํ ์์นด๋ ์ ์ฌ๋!
์์นด๋ ์ ์ฌ๋
'๊ณต๋ถ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[2019 KAKAO BLIND RECRUITMENT] ์คํ์ฑํ ๋ฐฉ - Level2 , Java (0) 2022.12.07 [2018 KAKAO BLIND RECRUITMENT] [1์ฐจ] ๋คํธ ๊ฒ์ - Level1 (0) 2022.12.07 [2018 KAKAO BLIND RECRUITMENT] [1์ฐจ] ๋น๋ฐ์ง๋ - Level1 (0) 2022.12.05 [Summer/Winter Coding(~2018)] ๋ฐฉ๋ฌธ๊ธธ์ด - Level2, Java (0) 2022.11.27 [Summer/Winter Coding(~2018)] ์์ด ๋๋ง์๊ธฐ - level2 (0) 2022.11.25