ν°μ€ν 리 λ·°
[2021 KAKAO BLIND RECRUITMENT]μ κ· μμ΄λ μΆμ²_μ κ· ννμμ λν΄
choi95 2021. 8. 19. 13:54λ¬Έμ
μΉ΄μΉ΄μ€μ μ
μ¬ν μ μ
κ°λ°μ λ€μ€λ "μΉ΄μΉ΄μ€κ³μ κ°λ°ν"μ λ°°μΉλμ΄, μΉ΄μΉ΄μ€ μλΉμ€μ κ°μ
νλ μ μ λ€μ μμ΄λλ₯Ό μμ±νλ μ
무λ₯Ό λ΄λΉνκ² λμμ΅λλ€. "λ€μ€"μκ² μ£Όμ΄μ§ 첫 μ
무λ μλ‘ κ°μ
νλ μ μ λ€μ΄ μΉ΄μΉ΄μ€ μμ΄λ κ·μΉμ λ§μ§ μλ μμ΄λλ₯Ό μ
λ ₯νμ λ, μ
λ ₯λ μμ΄λμ μ μ¬νλ©΄μ κ·μΉμ λ§λ μμ΄λλ₯Ό μΆμ²ν΄μ£Όλ νλ‘κ·Έλ¨μ κ°λ°νλ κ²μ
λλ€.
λ€μμ μΉ΄μΉ΄μ€ μμ΄λμ κ·μΉμ
λλ€.
- μμ΄λμ κΈΈμ΄λ 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μ λνλ μ μλ νΉμλ¬Έμλ -_.~!@#$%^&*()=+[{]}:?,<>/ λ‘ νμ λ©λλ€.
[μ μΆλ ₯ μ]
nonew_idresult
μ1 | "...!@BaT#*..y.abcdefghijklm" | "bat.y.abcdefghi" |
μ2 | "z-+.^." | "z--" |
μ3 | "=.=" | "aaa" |
μ4 | "123_.def" | "123_.def" |
μ5 | "abcdefghijklmn.p" | "abcdefghijklmn" |
μ μΆλ ₯ μμ λν μ€λͺ
μ
μΆλ ₯ μ #1
λ¬Έμ μ μμμ κ°μ΅λλ€.
μ
μΆλ ₯ μ #2
7λ¨κ³λ₯Ό κ±°μΉλ λμ new_idκ° λ³ννλ κ³Όμ μ μλμ κ°μ΅λλ€.
1λ¨κ³ λ³ν μμ΅λλ€.
2λ¨κ³ "z-+.^." → "z-.."
3λ¨κ³ "z-.." → "z-."
4λ¨κ³ "z-." → "z-"
5λ¨κ³ λ³ν μμ΅λλ€.
6λ¨κ³ λ³ν μμ΅λλ€.
7λ¨κ³ "z-" → "z--"
μ
μΆλ ₯ μ #3
7λ¨κ³λ₯Ό κ±°μΉλ λμ new_idκ° λ³ννλ κ³Όμ μ μλμ κ°μ΅λλ€.
1λ¨κ³ λ³ν μμ΅λλ€.
2λ¨κ³ "=.=" → "."
3λ¨κ³ λ³ν μμ΅λλ€.
4λ¨κ³ "." → "" (new_idκ° λΉ λ¬Έμμ΄μ΄ λμμ΅λλ€.)
5λ¨κ³ "" → "a"
6λ¨κ³ λ³ν μμ΅λλ€.
7λ¨κ³ "a" → "aaa"
μ
μΆλ ₯ μ #4
1λ¨κ³μμ 7λ¨κ³κΉμ§ κ±°μΉλ λμ new_id("123_.def")λ λ³νμ§ μμ΅λλ€. μ¦, new_idκ° μ²μλΆν° μΉ΄μΉ΄μ€μ μμ΄λ κ·μΉμ λ§μ΅λλ€.
μ
μΆλ ₯ μ #5
1λ¨κ³ λ³ν μμ΅λλ€.
2λ¨κ³ λ³ν μμ΅λλ€.
3λ¨κ³ λ³ν μμ΅λλ€.
4λ¨κ³ λ³ν μμ΅λλ€.
5λ¨κ³ λ³ν μμ΅λλ€.
6λ¨κ³ "abcdefghijklmn.p" → "abcdefghijklmn." → "abcdefghijklmn"
7λ¨κ³ λ³ν μμ΅λλ€.
λ¬Έμ νμ΄
- κ° λ¨κ³μ 쑰건μ λ§μ‘±μν€λ String λ©μλλ€κ³Ό μ κ· ννμ μμ±νλ κ²μ΄ ν΄λΉ λ¬Έμ μμ μ€μ
- λ©μλ 체μ΄λμ νμ©νμ¬ μ½λλ₯Ό μ’ λ λͺ ννκ² μμ±νλλ‘ νμμ
μ κ· ννμ(regular expression)
- μΌμ ν ν¨ν΄μ κ°μ§ λ¬Έμμ΄μ μ§ν©μ νννκΈ° μν΄ μ¬μ©νλ νμ μΈμ΄(formal language)
- μ κ· ννμμ μλ°μ€ν¬λ¦½νΈμ κ³ μ λ¬Έλ²μ΄ μλλ©°, λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μ μ½λ μλν°μ λ΄μ₯
- ν¨ν΄ λ§€μΉ κΈ°λ₯: νΉμ ν¨ν΄κ³Ό μΌμΉνλ λ¬Έμμ΄μ κ²μ λ° μΆμΆ λλ μΉνν μ μλ κΈ°λ₯
νλκ·Έ
- νλκ·Έλ μ΅μ μ΄λ―λ‘ μ νμ μΌλ‘ μ¬μ© κ°λ₯
- μμμ μκ΄μμ΄ νλ μ΄μμ νλκ·Έλ₯Ό λμμ μ€μ κ°λ₯
νλκ·Έ | μλ―Έ | μ€λͺ |
i | Ignore case | λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ ν¨ν΄ κ²μ |
g | Global | ν¨ν΄κ³Ό μΌμΉνλ λͺ¨λ λ¬Έμμ΄μ μ μ κ²μ |
m | Multi line | λ¬Έμμ΄μ νμ΄ λ°λμ΄λ ν¨ν΄ κ²μ μ§ν |
ν¨ν΄
- λ¬Έμμ΄μ μΌμ ν κ·μΉμ νννκΈ° μν΄ μ¬μ©
- ν¨ν΄μ /λ‘ μ΄κ³ λ«μΌλ©° λ¬Έμμ΄μ λ°μ΄νλ μλ΅(λ°μ΄νκΉμ§λ ν¨ν΄μ ν¬ν¨λμ΄ κ²μλ¨)
- νΉλ³ν μλ―Έλ₯Ό κ°μ§λ λ©νλ¬Έμ(meta character) λλ κΈ°νΈλ‘ νν κ°λ₯
ν¨ν΄ | μλ―Έ | μ€λͺ |
. | μμμ λ¬Έμμ΄ κ²μ | . μ μμμ λ¬Έμ ν κ°λ₯Ό μλ―Ένλ©° λ¬Έμμ λ΄μ©μ 무μμ΄λ μκ΄ μμ |
{m, n} | λ°λ³΅ κ²μ | μ΅μ mλ², μ΅λ nλ² λ°λ³΅λλ λ¬Έμμ΄μ μλ―Ένλ©° μ½€λ§ λ€μ 곡백 μ μ€λ₯ λ°μ |
{n,} | λ°λ³΅ κ²μ | μ΅μ nλ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μλ―Έ |
+ === {1,} | λ°λ³΅ κ²μ | μ΅μ νλ² μ΄μ λ°λ³΅λλ λ¬Έμμ΄μ μλ―Έ |
| | OR κ²μ | orμ μλ―Έλ₯Ό μ§λ |
[] | orλ‘ λμ | /A+|B+/g === /[AB]+/g |
- | λ²μ μ§μ | /[A-Z]+/g |
\d | λ²μ μ§μ | \dλ μ«μλ₯Ό μλ―Ένλ©° [0-9]μ κ°μ |
\D | λ²μ μ§μ | \dμ λ°λλ‘ λμνλ©° μ«μ μλ λ¬Έμλ₯Ό μλ―Έ |
\w | λ²μ μ§μ | μνλ²³, μ«μ, μΈλμ€μ½μ΄λ₯Ό μλ―Ένκ³ [A-Za-z0-9_]μ λμΌ |
\W | λ²μ μ§μ | \wμ λ°λλ‘ λμνλ©° μνλ²³, μ«μ, μΈλμ€μ½μ΄κ° μλ λ¬Έμλ₯Ό μλ―Έ |
/ | κ²μ | λ€μμ μ€λ λ¬Έμλ₯Ό νΉμ λ¬Έμ, 리ν°λ΄, μμ°Έμ‘° λλ 8μ§μ μ΄μ€μΌμ΄νλ‘ νμ |
? | λ²μ μ§μ | μμ λ¬Έμλ λΆλΆμμ 0κ°λ 1κ° νμ |
^ | λΆμ _[...] μμμ | notμ μλ―Έλ₯Ό μ§λ |
^ | μμ μμΉλ‘ κ²μ_[...] λ°μμ | λ¬Έμμ΄μ μμμ μλ―Έ |
$ | λ§μ§λ§ μμΉλ‘ κ²μ | λ¬Έμμ΄μ λ§μ§λ§μ μλ―Έ |
μ½λ
function solution(new_id) {
var answer = '';
answer = new_id.toLowerCase()
.replace(/[^a-z0-9-_.]/gi, '')
.replace(/[.]{2}/g, '.')
.replace(/^\.|\.$/g, '')
if(answer.length === '') answer = "a";
if(answer.length > 15) answer = answer.substring(0, 15).replace(/[.]$/g, '');
while(answer.length < 3) {
answer+=answer[answer.length - 1];
}
return answer;
}
λ€λ₯Έ μ¬λ νμ΄
function solution(new_id) {
const answer = new_id
.toLowerCase() // 1
.replace(/[^\w-_.]/g, '') // 2
.replace(/\.+/g, '.') // 3
.replace(/^\.|\.$/g, '') // 4
.replace(/^$/, 'a') // 5
.slice(0, 15).replace(/\.$/, ''); // 6
const len = answer.length;
return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
λ¬Έμμ΄μ΄ 15λ₯Ό λμ΄μκ² λλ©΄ κ·Έ μ΄νμ λ¬Έμλ€μ μ κ±°νλ 6λ¨κ³μμ substring λ©μλλ₯Ό μ¬μ©νμμ§λ§ μ΄ λΆμ μ΄ λν μ κ· ννμ ν¨ν΄ .μ μ¬μ©νμ¬ λ²μλ₯Ό λμ΄μλ μμμ λ¬Έμλ€μ λͺ¨λ 곡백μΌλ‘ μ²λ¦¬νμλ€.
λν λ¬Έμμ΄μ΄ 2μ΄νμΌ κ²½μ°μ String.prototype.charAt()μ μ¬μ©νμ¬ λ§μ§λ§ μΈλ±μ€μ λ¬Έμμ΄μ κ°μ Έμ¨ λ€ 3μ΄ λ λκΉμ§ νμν νμλ₯Ό μΈμλ‘ λ겨 μ΄ νμλ§νΌ λ°λ³΅νλ String.prototype.repeat()μ μ¬μ©νμ¬ λ€μ λ¬Έμλ₯Ό μΆκ°νμλ€.
charAt() ν¨μλ λ¬Έμμ΄μμ νΉμ μΈλ±μ€μ μμΉνλ μ λμ½λ λ¨μΌλ¬Έμλ₯Ό λ°νν©λλ€.
repeat() λ©μλλ λ¬Έμμ΄μ μ£Όμ΄μ§ νμλ§νΌ λ°λ³΅ν΄ λΆμΈ μλ‘μ΄ λ¬Έμμ΄μ λ°νν©λλ€.
const solution = (new_id) => {
const id = new_id
.toLowerCase()
.replace(/[^\w\d-_.]/g, '')
.replace(/\.{2,}/g, '.')
.replace(/^\.|\.$/g, '')
.padEnd(1, 'a')
.slice(0, 15)
.replace(/^\.|\.$/g, '')
return id.padEnd(3, id[id.length-1])
}
μ΄ λΆμ νλ²λ λ³Έμ λ μλ padEnd() λΌλ λ©μλλ₯Ό μ¬μ©νμ¬ ν΄λΉ λ¬Έμ λ₯Ό νμ΄νμλλ° μ°Ύμ보λ μ΄νμ μ μ©νκ² μ°μΌ μ μμ κ² κ°μ κ°μ΄ ν¬μ€ν ν΄λλ€.
padEnd()λ©μλλ νμ¬ λ¬Έμμ΄μ λ€λ₯Έ λ¬Έμμ΄μ μ±μ, μ£Όμ΄μ§ κΈΈμ΄λ₯Ό λ§μ‘±νλ μλ‘μ΄ λ¬Έμμ΄μ λ°νν©λλ€. μ±μλ£κΈ°λ λμ λ¬Έμμ΄μ λ(μ°μΈ‘)λΆν° μ μ©λ©λλ€.
κ΄λ ¨ λ¬Έμ
https://choi95.tistory.com/42?category=854389
https://choi95.tistory.com/31?category=854389
'μκ³ λ¦¬μ¦ > κΈ°μΆ λ° λ°±μ€ νμ΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 10828λ²]μ€ν (0) | 2021.08.24 |
---|---|
[2021 μΉ΄μΉ΄μ€ μ±μ©μ°κ³ν μΈν΄μ]μ«μ λ¬Έμμ΄κ³Ό μλ¨μ΄ (0) | 2021.08.20 |
λ‘λμ μ΅κ³ μμμ μ΅μ μμ (0) | 2021.08.18 |
[λ μ μκ³ λ¦¬μ¦]μ΅λ μ μ ꡬνκΈ°/νλ²ν λ°°λ λ¬Έμ (0) | 2021.08.17 |
[νκ΅μ 보μ¬λ¦ΌνΌμλ]μ λ§λκΈ° (0) | 2021.07.14 |