CodingTest/Java
Lv.2 : λ΄μ€ ν΄λ¬μ€ν°λ§
Soom_1n
2023. 11. 7. 10:43
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
πΈ λ¬Έμ λΆμ πΈ
- μμΉ΄λ μ μ¬λλ₯Ό ꡬννκΈ° μν΄ κ΅μ§ν©κ³Ό ν©μ§ν©μ ꡬννλ λ¬Έμ μ΄λ€.
- μ£Όμ΄μ§ λ λ¬Έμμ΄μ νμ±μ΄ νμνλ€.
πΈ λ¬Έμ νμ΄ πΈ
- λ λ¬Έμμ΄μ λμλ¬Έμλ₯Ό ꡬλΆνμ§ μμΌλ―λ‘, λλ¬Έμ νΉμ μλ¬Έμλ‘ μΌμΉμν¨λ€.
- 2λ¬Έμμ© μλΌμ μμλ‘ μ¬μ©νλλ°, λμ΄μ°κΈ°λ νΉμλ¬Έμ λ± μνλ²³μ΄ μλ λ¬Έμκ° ν¬ν¨λμ΄μμΌλ©΄ λ°°μ νλ€.
- μ¬κΈ°μ μ£Όμ ν μ μ μνλ²³μ΄ μλ λ¬Έμλ€μ μ κ±°νκ³ 2λ¬Έμμ© μλ₯΄λκ² μλ, λ¨Όμ μλ₯Έλ€μ νν°λ§ νλ μμμ΄λ€.
- μ€λ³΅μ νμ©νλ λ€μ€ μ§ν©μ΄κΈ° λλ¬Έμ Mapμ κ°μμ ν¨κ» μ μ₯νλ€.
- κ΅μ§ν©μ λ μ§ν©μ κ³΅ν΅ μμλ₯Ό μ°Ύκ³ , λ κ°μ€ μ΅μκ°μ κ΅μ§ν© κ°μμ λνλ€.
- ν©μ§ν©μ λ μ§ν©μ κ³΅ν΅ μμμ λ κ°μμλ μ΅λκ°μ λνκ³ , κ²ΉμΉμ§ μλ μμ κ°λ λν΄μ€λ€.
- κ΅μ§ν© / ν©μ§ν© * 65536 μ λ°ννλ€.
πΈ μ½λ πΈ
import java.util.Map;
import java.util.HashMap;
class Solution {
public int solution(String str1, String str2) {
// Input
str1 = str1.toUpperCase();
str2 = str2.toUpperCase();
Map<String, Integer> map1 = new HashMap<>();
Map<String, Integer> map2 = new HashMap<>();
for (int i = 0; i < str1.length() - 1; i++) {
String temp = str1.substring(i, i + 2).replaceAll("[^a-zA-Z]", "");
if (temp.length() != 2)
continue;
if (!map1.containsKey(temp))
map1.put(temp, 1);
else
map1.put(temp, map1.get(temp) + 1);
}
for (int i = 0; i < str2.length() - 1; i++) {
String temp = str2.substring(i, i + 2).replaceAll("[^a-zA-Z]", "");
if (temp.length() != 2)
continue;
if (!map2.containsKey(temp))
map2.put(temp, 1);
else
map2.put(temp, map2.get(temp) + 1);
}
if (map1.isEmpty() && map2.isEmpty())
return 65536;
// κ΅μ§ν©
double cnt1 = 0;
for (Map.Entry<String, Integer> entry : map1.entrySet()) {
if (map2.containsKey(entry.getKey()) && map2.get(entry.getKey()) > 0) {
cnt1 += Math.min(entry.getValue(), map2.get(entry.getKey()));
}
}
// ν©μ§ν©
double cnt2 = 0;
for (Map.Entry<String, Integer> entry : map1.entrySet()) {
if (map2.containsKey(entry.getKey())) {
cnt2 += Math.max(entry.getValue(), map2.get(entry.getKey()));
map2.remove(entry.getKey());
} else {
cnt2 += entry.getValue();
}
}
for (Map.Entry<String, Integer> entry : map2.entrySet()) {
cnt2 += entry.getValue();
}
return (int)(cnt1 / cnt2 * 65536);
}
}
πΈ μ½λ ν΄μ πΈ
- λμλ¬Έμ ꡬλΆμ΄ μμΌλ―λ‘, μ£Όμ΄μ§ str1μ str2λ₯Ό λλ¬Έμλ‘ λ³νν΄μ ν΅μΌνλ€.
- λ μ§ν©μ μμλ₯Ό μ μ₯νκΈ° μν΄ Mapμ 2κ° λ§λ λ€.
- κ°κ° 2λ¬Έμμ© μλ₯΄κ³ μνλ²³μ μ μΈν λ¬Έμλ μ κ±°ν΄μ κΈΈμ΄κ° 2μ΄λ©΄ μ§ν©μ ν¬ν¨νλ€.
- μ§ν©μ μ²μ λ£λ μμλ©΄ κ°μ 1, μ²μμ΄ μλλ©΄ κΈ°μ‘΄κ°+1 λ‘ μ μ₯νλ€.
- λ§μ½ λ μ§ν©μ μμ κ°μκ° λͺ¨λ 0μ΄λΌλ©΄, ν©μ§ν©μ κ°μκ° 0μ΄ λμ¨λ€. λ¬Έμ μμ 1λ‘ κ°μ°νλΌ νμΌλ―λ‘, 1 * 65536 μ λ°ννλ€.
- κ΅μ§ν©μ κ²ΉμΉλ μμλ₯Ό μ°Ύκ³ , μ μ₯λ λ κ°μ€ μ΅μκ°μ κ΅μ§ν© κ°μμ λνλ€.
- ν©μ§ν©μ κ²ΉμΉλ μμλ₯Ό μ°Ύκ³ , μ μ₯λ λ κ°μ€ μ΅λκ°μ ν©μ§ν© κ°μμ λνλ€.
- μΆκ°λ‘ κ²ΉμΉμ§ μμ μμμ κ°λ ν©μ§ν© κ°μμ λνλ€.
- κ΅μ§ν© / ν©μ§ν© * 65536μ λ°ννλ€.
πΈ end πΈ
- μΉ΄μΉ΄μ€ λ¬Έμ λΌμ κ·Έλ°μ§ 2λ 벨 μΉκ³ λ κ½€ 볡μ‘νλ κ² κ°λ€. νμ§λ§ λ€μ보λ κ·Έλ₯ λ¬Έμμ΄ μ²λ¦¬μ κ΅μ§ν©, ν©μ§ν© ꡬνκΈ°μ¬μ κ·Έλ κ² μ΄λ ΅μ§λ μμ κ² κ°λ€.
- μ²μμ μνλ²³μ΄ μλ λ¬Έμλ₯Ό μ κ±°ν λ€ 2λ¬Έμμ© μλ₯΄λ κ±°λ‘ μ΄ν΄νλλ°, μλ₯Έ λ€μ μ κ±°νλ κ²μ΄μλ€.
- μμ 3λ²μμ λλ²κΉ ν΄μ€μ μ μ μμλ€.
- μμ 4λ²μ λ μ§ν©μ΄ λͺ¨λ 0μΈ κ²½μ°λ₯Ό λλ²κΉ ν΄μ€μ λ μμΈμ²λ¦¬λ₯Ό ν μ μμλ€.
- μμ λ§ λ§μΆλ©΄ ν΅κ³Όλλλ‘ ν΄λ¬μ 2λ λ²¨μΈ κ² κ°κΈ°λ νλ€.
- 2018 KAKAO BLIND RECRUITMENTμ 5λ² λ¬Έμ μΈλ°, μ€κΈ λμ΄λμ΄κ³ μ λ΅λ₯ μ 41.84%μ΄λ€.
- λ€μ€ μ§ν©μμ ν©μ§ν©, κ΅μ§ν©μ ꡬννλκ² ν΅μ¬μΈ κ² κ°μλ°, λ€μ€ μ§ν©μ ꡬνμ§ μλλΌλ, λ³ν©μ λ ¬μ ν΅ν΄ ꡬνν μ μλ€κ³ νλ€.
- λ€μμ λ¬Έμ ν΄μ€μ΄λ€.
μ΄ λ¬Έμ λ μμΉ΄λ μ μ¬λλ₯Ό μ€λͺ ν΄μ£Όκ³ μμΉ΄λ μ μ¬λλ₯Ό μ§μ κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νλ λ¬Έμ μ λλ€. μμΉ΄λ μ μ¬λλ μ€λ¬΄μμλ μ μ¬ν λ¬Έμλ₯Ό νλ³ν λ μ£Όλ‘ μ°μ΄λλ°μ, λͺ°λλλΌλ λ¬Έμ μμ μμΈν μ€λͺ ν΄μ£ΌκΈ° λλ¬Έμ μ΄ν΄νλλ° μ΄λ €μμ μμμ κ±° κ°μ΅λλ€. 곡μμ λ§€μ° κ°λ¨νλ°μ, κ΅μ§ν©μ ν©μ§ν©μΌλ‘ λλ μμ λλ€. λ€λ§, μ΄ κ°μ 0μμ 1 μ¬μ΄μ μ€μκ° λλλ°, μ¬κΈ°μλ μ΄λ₯Ό λ€λ£¨κΈ° μ½λλ‘ 65536μ κ³±ν ν μμμ μλλ₯Ό λ²λ¦¬κ³ μ μλΆλ§ μ·¨νλλ‘ ν©λλ€.
λ¬Έμ μ€λͺ μ μμμ μ€λ³΅μ νμ©νλ λ€μ€μ§ν©multisetμΌλ‘ λμ΄ μλλ°, μμ£Ό μ νλ μλ£κ΅¬μ‘°κ° μλκ³ , μΌλΆ μΈμ΄μμλ κΈ°λ³ΈμΌλ‘ μ 곡νλ μλ£κ΅¬μ‘°κ° μλλΌ μ΄λ €μνλ λΆλ€μ΄ μμμ΅λλ€. νμ§λ§ λ€μ€μ§ν© μλ£κ΅¬μ‘°λ₯Ό μ°μ§ μλλΌλ, κ° μμλ₯Ό μ λ ¬λ λ°°μ΄μ λ£μ ν λ³ν© μ λ ¬Merge sortμμ λ°°μ λ μ½λλ₯Ό μμ©, μ΄λ ΅μ§ μκ² ν©μ§ν©κ³Ό κ΅μ§ν© ν¨μλ₯Ό μ§μ ꡬνν μλ μμ΅λλ€.
λ€μ€μ§ν©μ κ΅μ§ν©, ν©μ§ν©λ§ μ ꡬν΄λΈλ€λ©΄ μ΄ λ¬Έμ λ μ΄λ ΅μ§ μκ² ν μ μμΌλ©°, λ€λ§ μ§ν© Aμ Bκ° λͺ¨λ 곡μ§ν©μΌ κ²½μ°μλ λλμ μ΄ μ μλμ§ μμΌλ―λ‘division by zero λ°λ‘ J(A,B) = 1λ‘ μ μν©λλ€. μ¦, 65536μ κ³±νλ©΄ μ΄ κ²½μ° 1 * 65536 = 65536μ΄ μ λ΅μ΄ λ©λλ€. μμ μ μΆλ ₯μλ ν©μ§ν©μ΄ 곡μ§ν©μΈ κ²½μ°κ° ν¬ν¨λμ΄ μμΌλ―λ‘ μ΄ κ²½μ°λ§ μ£Όμνλ€λ©΄ μ½κ² ν μ μλ λ¬Έμ μ λλ€.
μ΄ λ¬Έμ μ μ λ΅λ₯ μ 41.84%μ λλ€.
728x90