μΈμ΄: java
[νλ‘κ·Έλλ¨Έμ€] 2021 KAKAO BLIND RECRUITMENT > μ κ· μμ΄λ μΆμ²
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
[λ¬Έμ μ€λͺ ]
μΉ΄μΉ΄μ€μ μ
μ¬ν μ μ
κ°λ°μ λ€μ€λ "μΉ΄μΉ΄μ€κ³μ κ°λ°ν"μ λ°°μΉλμ΄, μΉ΄μΉ΄μ€ μλΉμ€μ κ°μ
νλ μ μ λ€μ μμ΄λλ₯Ό μμ±νλ μ
무λ₯Ό λ΄λΉνκ² λμμ΅λλ€. "λ€μ€"μκ² μ£Όμ΄μ§ 첫 μ
무λ μλ‘ κ°μ
νλ μ μ λ€μ΄ μΉ΄μΉ΄μ€ μμ΄λ κ·μΉμ λ§μ§ μλ μμ΄λλ₯Ό μ
λ ₯νμ λ, μ
λ ₯λ μμ΄λμ μ μ¬νλ©΄μ κ·μΉμ λ§λ μμ΄λλ₯Ό μΆμ²ν΄μ£Όλ νλ‘κ·Έλ¨μ κ°λ°νλ κ²μ
λλ€.
λ€μμ μΉ΄μΉ΄μ€ μμ΄λμ κ·μΉμ
λλ€.
• μμ΄λμ κΈΈμ΄λ 3μ μ΄μ 15μ μ΄νμ¬μΌ ν©λλ€.
• μμ΄λλ μνλ²³ μλ¬Έμ, μ«μ, λΉΌκΈ°(-), λ°μ€(_), λ§μΉ¨ν(.) λ¬Έμλ§ μ¬μ©ν μ μμ΅λλ€.
• λ¨, λ§μΉ¨ν(.)λ μ²μκ³Ό λμ μ¬μ©ν μ μμΌλ©° λν μ°μμΌλ‘ μ¬μ©ν μ μμ΅λλ€.
"λ€μ€"λ λ€μκ³Ό κ°μ΄ 7λ¨κ³μ μμ°¨μ μΈ μ²λ¦¬ κ³Όμ μ ν΅ν΄ μ κ· μ μ κ° μ
λ ₯ν μμ΄λκ° μΉ΄μΉ΄μ€ μμ΄λ κ·μΉμ λ§λ μ§ κ²μ¬νκ³ κ·μΉμ λ§μ§ μμ κ²½μ° κ·μΉμ λ§λ μλ‘μ΄ μμ΄λλ₯Ό μΆμ²ν΄ μ£Όλ €κ³ ν©λλ€.
μ κ· μ μ κ° μ
λ ₯ν μμ΄λκ° new_id λΌκ³ νλ€λ©΄,
1λ¨κ³ new_idμ λͺ¨λ λλ¬Έμλ₯Ό λμλλ μλ¬Έμλ‘ μΉνν©λλ€.
2λ¨κ³ new_idμμ μνλ²³ μλ¬Έμ, μ«μ, λΉΌκΈ°(-), λ°μ€(_), λ§μΉ¨ν(.)λ₯Ό μ μΈν λͺ¨λ λ¬Έμλ₯Ό μ κ±°ν©λλ€.
3λ¨κ³ new_idμμ λ§μΉ¨ν(.)κ° 2λ² μ΄μ μ°μλ λΆλΆμ νλμ λ§μΉ¨ν(.)λ‘ μΉνν©λλ€.
4λ¨κ³ new_idμμ λ§μΉ¨ν(.)κ° μ²μμ΄λ λμ μμΉνλ€λ©΄ μ κ±°ν©λλ€.
5λ¨κ³ new_idκ° λΉ λ¬Έμμ΄μ΄λΌλ©΄, new_idμ "a"λ₯Ό λμ ν©λλ€.
6λ¨κ³ new_idμ κΈΈμ΄κ° 16μ μ΄μμ΄λ©΄, new_idμ 첫 15κ°μ λ¬Έμλ₯Ό μ μΈν λλ¨Έμ§ λ¬Έμλ€μ λͺ¨λ μ κ±°ν©λλ€. λ§μ½ μ κ±° ν λ§μΉ¨ν(.)κ° new_idμ λμ μμΉνλ€λ©΄ λμ μμΉν λ§μΉ¨ν(.) λ¬Έμλ₯Ό μ κ±°ν©λλ€.
7λ¨κ³ new_idμ κΈΈμ΄κ° 2μ μ΄νλΌλ©΄, new_idμ λ§μ§λ§ λ¬Έμλ₯Ό new_idμ κΈΈμ΄κ° 3μ΄ λ λκΉμ§ λ°λ³΅ν΄μ λμ λΆμ λλ€.
μλ₯Ό λ€μ΄, new_id κ°μ΄ "...!@BaT#*..y.abcdefghijklm" λΌλ©΄, μ 7λ¨κ³λ₯Ό κ±°μΉκ³ λλ©΄ new_idλ μλμ κ°μ΄ λ³κ²½λ©λλ€.
1λ¨κ³ λλ¬Έμ 'B'μ 'T'κ° μλ¬Έμ 'b'μ 't'λ‘ λ°λμμ΅λλ€.
"...!@BaT#*..y.abcdefghijklm" → "...!@bat#*..y.abcdefghijklm"
2λ¨κ³ '!', '@', '#', '*' λ¬Έμκ° μ κ±°λμμ΅λλ€.
"...!@bat#*..y.abcdefghijklm" → "...bat..y.abcdefghijklm"
3λ¨κ³ '...'μ '..' κ° '.'λ‘ λ°λμμ΅λλ€.
"...bat..y.abcdefghijklm" → ".bat.y.abcdefghijklm"
4λ¨κ³ μμ΄λμ μ²μμ μμΉν '.'κ° μ κ±°λμμ΅λλ€.
".bat.y.abcdefghijklm" → "bat.y.abcdefghijklm"
5λ¨κ³ μμ΄λκ° λΉ λ¬Έμμ΄μ΄ μλλ―λ‘ λ³νκ° μμ΅λλ€.
"bat.y.abcdefghijklm" → "bat.y.abcdefghijklm"
6λ¨κ³ μμ΄λμ κΈΈμ΄κ° 16μ μ΄μμ΄λ―λ‘, μ²μ 15μλ₯Ό μ μΈν λλ¨Έμ§ λ¬Έμλ€μ΄ μ κ±°λμμ΅λλ€.
"bat.y.abcdefghijklm" → "bat.y.abcdefghi"
7λ¨κ³ μμ΄λμ κΈΈμ΄κ° 2μ μ΄νκ° μλλ―λ‘ λ³νκ° μμ΅λλ€.
"bat.y.abcdefghi" → "bat.y.abcdefghi"
λ°λΌμ μ κ· μ μ κ° μ λ ₯ν new_idκ° "...!@BaT#*..y.abcdefghijklm"μΌ λ, λ€μ€μ νλ‘κ·Έλ¨μ΄ μΆμ²νλ μλ‘μ΄ μμ΄λλ "bat.y.abcdefghi" μ λλ€.
[λ¬Έμ ]
μ κ· μ μ κ° μ λ ₯ν μμ΄λλ₯Ό λνλ΄λ new_idκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, "λ€μ€"κ° μ€κ³ν 7λ¨κ³μ μ²λ¦¬ κ³Όμ μ κ±°μΉ νμ μΆμ² μμ΄λλ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ.
[μ νμ¬ν]
new_idλ κΈΈμ΄ 1 μ΄μ 1,000 μ΄νμΈ λ¬Έμμ΄μ
λλ€.
new_idλ μνλ²³ λλ¬Έμ, μνλ²³ μλ¬Έμ, μ«μ, νΉμλ¬Έμλ‘ κ΅¬μ±λμ΄ μμ΅λλ€.
new_idμ λνλ μ μλ νΉμλ¬Έμλ -_.~!@#$%^&*()=+[{]}:?,<>/ λ‘ νμ λ©λλ€.
π νμ΄
[μΈμ΄] java
μ£Όμ΄μ§ Stringμ 쑰건μ λ§κ² λ³κ²½νλ λ¬Έμ . κ°μΈμ μΌλ‘ λ무 μ¬λ°λ λ¬Έμ μλ€!
String answer = new_id.toLowerCase() // 1λ¨κ³
.replaceAll("[^a-z0-9-_\\.]", "") // 2λ¨κ³
.replaceAll("\\.{2,}", "\\.") // 3λ¨κ³
.replaceAll("\\.$|^\\.", ""); // 4λ¨κ³
1λ¨κ³
λλ¬Έμλ₯Ό μλ¬Έμλ‘ μΉν
toLowerCase()
2λ¨κ³
μνλ²³ μλ¬Έμ, μ«μ, λΉΌκΈ°(-), λ°μ€(_), λ§μΉ¨ν(.) λ¬Έμλ§ λΉΌκ³ λ¨κΈ°κΈ°
[a-z] μνλ²³ μλ¬Έμ
[0-9] μ«μ
[-_\\.] 쑰건μ λμ¨ νΉμλ¬Έμ(.(λ§μΉ¨ν)λ κ·Έλλ‘ μ¬μ©νλ €λ©΄ μ΄μ€μΌμ΄ν λ¬Έμ \(λ°±μ¬λμ) λ κ°λ₯Ό λ£μ΄μ£Όμ΄μΌ νλ€.)
λκ΄νΈ([]) λ΄μ ^μ notμ μλ―Ένλ€.
[^a-z0-9-_\\.] λ₯Ό "" λΉλ¬Έμλ‘ λ³κ²½νλ€.
3λ¨κ³
λ§μΉ¨νκ° λ κ° μ΄μμ΄λ©΄ ν κ°λ‘ λ³κ²½
\\. λ§μΉ¨ν
{2,} 2κ° μ΄μ
\\.{2,} λ₯Ό \\.λ‘ λ³κ²½νλ€.
4λ¨κ³
λ§μΉ¨νλ‘ μμνκ±°λ λ§μΉ¨νλ‘ λλλ©΄ λ§μΉ¨ν μμ
\\.$ λ§μΉ¨νλ‘ λλλ λ¬Έμ
^\\. λ§μΉ¨νλ‘ μμνλ λ¬Έμ
\\.$|^\\. λ₯Ό "" λΉ λ¬Έμμ΄λ‘ λ³κ²½νλ€.(μ‘°κ±΄μ΄ μ¬λ¬κ°μΌ λ |(νμ΄νλΌμΈ)μ λ£μ΄μ€λ€.)
if(answer.length() == 0){
answer = "a";
}
5λ¨κ³
λΉ λ¬Έμμ΄μ΄λ©΄ "a" μΆκ°
if(answer.length >= 16){
answer = answer.substring(0, 15).replaceAll("\\.$", "");
}
6λ¨κ³
κΈΈμ΄κ° 16μ μ΄μμ΄λ©΄ 첫 15κ°μ λ¬Έμλ₯Ό μ μΈν λλ¨Έμ§ λ¬Έμλ€μ λͺ¨λ μ κ±°
λ§μ½ μ κ±° ν λ§μΉ¨ν(.)κ° new_idμ λμ μμΉνλ€λ©΄ λμ μμΉν λ§μΉ¨ν(.) λ¬Έμλ₯Ό μ κ±°
substring(0, 15) 0μμ 15κΉμ§μ λ¬Έμλ§ κ°μ§κ³ μ΄
\\.$ λ§μΉ¨νλ‘ λλλ λ¬Έμλ₯Ό λΉλ¬Έμμ΄λ‘ λ³κ²½
if(answer.length() <= 3){
for(int i = 0; i < 3; i++){
answer += answer.charAt(answer.length()-1);
if(answer.length() == 3){
break;
}
}
}
while(answer.length() <= 3){
answer += answer.charAt(answer.length-1);
}
μ΄λ κ² μ¨λ λ λ―
7λ¨κ³
κΈΈμ΄κ° 2 μ΄νλΌλ©΄ λ§μ§λ§ λ¬Έμλ₯Ό κΈΈμ΄κ° 3μ΄ λ λκΉμ§ λΆμΈλ€.
charAt(answer.length()-1) answerμ λ§μ§λ§ λ¬Έμ.
κΈΈμ΄κ° 3μ΄ λλ©΄ λ°λ³΅λ¬Έ μ€μ§. μ½λκ° μ’ λλ½λ€. λ μ’μ λ°©λ²μ΄ μμμ ν λ° μμ£Ό κ·Έλ₯ ν΅κ³Όνκ³ μΆμ΄μ μλ¬μ΄ λ¬μλλ΄...
μ 체 μ½λ(1λ¨κ³~7λ¨κ³)
class Solution {
public String solution(String new_id) {
String answer = "";
answer = new_id.toLowerCase()
.replaceAll("[^a-z0-9-_\\.]", "")
.replaceAll("\\.{2,}", "\\.")
.replaceAll("\\.$|^\\.", "");
if(answer.length() == 0){
answer = "a";
}
if(answer.length() >= 16){
answer = answer.substring(0, 15).replaceAll("\\.$", "");
}else if(answer.length() <= 2){
for(int i = 0; answer.length() < 3; i++) {
answer += answer.charAt(answer.length() - 1);
if(answer.length() > 3){
break;
}
}
}
return answer;
}
}
μΌλ λ²λ ν΅κ³Όλ νμ§λ§ μ΄λ κ² μ 리νκ³ λλ μ’ λ κ³ λ €ν΄μΌν μ¬νμ΄ λ³΄μΈλ€.
Stringμ κΈΈμ΄ λ³κ²½μ΄ μλ κ³³μμ StringBuilderλ₯Ό μ¬μ©νκ³ , κ°λ μ± μκ² μ½λλ₯Ό μμ±νλ©΄ λ μ’μ μ½λκ° λ κ² κ°λ€!
μ κ·μ μ§±μ΄ λ κ±°μΌ
'μ½λ©ν μ€νΈ > νλ‘κ·Έλλ¨Έμ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Lv.1] Kλ²μ§Έ μ (0) | 2024.06.17 |
---|---|
[Lv.2] νλ Έμ΄μ ν (1) | 2024.06.12 |
[Lv.1] ν°μΌλͺ¬ (0) | 2024.01.08 |
[Lv.1] μμ£Όνμ§ λͺ»ν μ μ (0) | 2024.01.06 |
[Lv.2] μ¬λ°λ₯Έ κ΄νΈ (0) | 2023.12.14 |