ν°μ€ν 리 λ·°
[2018 KAKAO BLIND RECRUITMENT]λ€νΈ κ²μ_regExp.match λ©μλμ λν΄ νμ΅
choi95 2021. 8. 26. 12:21λ¬Έμ
μΉ΄μΉ΄μ€ν‘ κ²μλ³μ νλ°κΈ° μ κ· μλΉμ€λ‘ λ€νΈ κ²μμ μΆμνκΈ°λ‘ νλ€. λ€νΈ κ²μμ λ€νΈνμ λ€νΈλ₯Ό μΈ μ°¨λ‘ λμ Έ κ·Έ μ μμ ν©κ³λ‘ μ€λ ₯μ 겨루λ κ²μμΌλ‘, λͺ¨λκ° κ°λ¨ν μ¦κΈΈ μ μλ€.
κ° μ
μ¬ν 무μ§λ μ½λ© μ€λ ₯μ μΈμ λ°μ κ²μμ ν΅μ¬ λΆλΆμΈ μ μ κ³μ° λ‘μ§μ λ§‘κ² λμλ€. λ€νΈ κ²μμ μ μ κ³μ° λ‘μ§μ μλμ κ°λ€.
- λ€νΈ κ²μμ μ΄ 3λ²μ κΈ°νλ‘ κ΅¬μ±λλ€.
- κ° κΈ°νλ§λ€ μ»μ μ μλ μ μλ 0μ μμ 10μ κΉμ§μ΄λ€.
- μ μμ ν¨κ» Single(S), Double(D), Triple(T) μμμ΄ μ‘΄μ¬νκ³ κ° μμ λΉμ²¨ μ μ μμμ 1μ κ³±, 2μ κ³±, 3μ κ³± (μ μ1 , μ μ2 , μ μ3 )μΌλ‘ κ³μ°λλ€.
- μ΅μ μΌλ‘ μ€νμ(*) , μμ°¨μ(#)μ΄ μ‘΄μ¬νλ©° μ€νμ(*) λΉμ²¨ μ ν΄λΉ μ μμ λ°λ‘ μ μ μ»μ μ μλ₯Ό κ° 2λ°°λ‘ λ§λ λ€. μμ°¨μ(#) λΉμ²¨ μ ν΄λΉ μ μλ λ§μ΄λμ€λλ€.
- μ€νμ(*)μ 첫 λ²μ§Έ κΈ°νμμλ λμ¬ μ μλ€. μ΄ κ²½μ° μ²« λ²μ§Έ μ€νμ(*)μ μ μλ§ 2λ°°κ° λλ€. (μμ 4λ² μ°Έκ³ )
- μ€νμ(*)μ ν¨κ³Όλ λ€λ₯Έ μ€νμ(*)μ ν¨κ³Όμ μ€μ²©λ μ μλ€. μ΄ κ²½μ° μ€μ²©λ μ€νμ(*) μ μλ 4λ°°κ° λλ€. (μμ 4λ² μ°Έκ³ )
- μ€νμ(*)μ ν¨κ³Όλ μμ°¨μ(#)μ ν¨κ³Όμ μ€μ²©λ μ μλ€. μ΄ κ²½μ° μ€μ²©λ μμ°¨μ(#)μ μ μλ -2λ°°κ° λλ€. (μμ 5λ² μ°Έκ³ )
- Single(S), Double(D), Triple(T)μ μ μλ§λ€ νλμ© μ‘΄μ¬νλ€.
- μ€νμ(*), μμ°¨μ(#)μ μ μλ§λ€ λ μ€ νλλ§ μ‘΄μ¬ν μ μμΌλ©°, μ‘΄μ¬νμ§ μμ μλ μλ€.
0~10μ μ μμ λ¬Έμ S, D, T, *, #λ‘ κ΅¬μ±λ λ¬Έμμ΄μ΄ μ λ ₯λ μ μ΄μ μλ₯Ό λ°ννλ ν¨μλ₯Ό μμ±νλΌ.
μ λ ₯ νμ
"μ μ|보λμ€|[μ΅μ
]"μΌλ‘ μ΄λ£¨μ΄μ§ λ¬Έμμ΄ 3μΈνΈ.
μ) 1S2D*3T
- μ μλ 0μμ 10 μ¬μ΄μ μ μμ΄λ€.
- 보λμ€λ S, D, T μ€ νλμ΄λ€.
- μ΅μ μ *μ΄λ # μ€ νλμ΄λ©°, μμ μλ μλ€.
μΆλ ₯ νμ
3λ²μ κΈ°νμμ μ»μ μ μ ν©κ³μ ν΄λΉνλ μ μκ°μ μΆλ ₯νλ€.
μ) 37
μ μΆλ ₯ μμ
μμ dartResultanswerμ€λͺ
1 | 1S2D*3T | 37 | 11 * 2 + 22 * 2 + 33 |
2 | 1D2S#10S | 9 | 12 + 21 * (-1) + 101 |
3 | 1D2S0T | 3 | 12 + 21 + 03 |
4 | 1S*2T*3S | 23 | 11 * 2 * 2 + 23 * 2 + 31 |
5 | 1D#2S*3S | 5 | 12 * (-1) * 2 + 21 * 2 + 31 |
6 | 1T2D3D# | -4 | 13 + 22 + 32 * (-1) |
7 | 1D2S3T* | 59 | 12 + 21 * 2 + 33 * 2 |
μ½λ
function solution(dartResult) {
var answer = 0;
let regExp = /[0-9]/;
let section = ['S', 'D', 'T'];
let scores = [];
let score = 0;
for(let i = 0; i < dartResult.length; i++) {
if(regExp.test(dartResult[i])) {
score = 0;
score = Number(dartResult[i]);
}
if(section.includes(dartResult[i])) {
score = Math.pow(score, section.indexOf(dartResult[i]) + 1);
if(regExp.test(dartResult[i + 1]) || !dartResult[i + 1]) scores.push(score);
}
if(dartResult[i] === '*') {
if(scores.length === 0) scores.push(score * 2);
else {
scores.push(score * 2);
scores[scores.length - 2] = scores[scores.length - 2] * 2;
}
}
if(dartResult[i] === '#') scores.push(-score);
}
answer = scores.reduce((a, b) => a + b);
return answer;
}
μ€λ΅
2λ² μ‘°κ±΄μΈ 'κ° κΈ°νλ§λ€ μ»μ μ μλ μ μλ 0μ μμ 10μ κΉμ§μ΄λ€.'λ₯Ό μκ°νμ§ λͺ»νλ€.
inputκ°μΌλ‘ λ€μ΄μ¨ λ¬Έμμ΄ μ체λ₯Ό μννλ€ λ³΄λ λ μλ¦ΏμμΈ 10μ μ μ μ 10μ κ·Έλλ‘ μ μλ‘ μΉννλ κ²μ΄ μλ μ μ 1κ³Ό 0μΌλ‘ λλμ΄ μ μλ‘ μΉννλ λ°λμ ν΄λΉ ν μ€νΈ μΌμ΄μ€μμ μ€λ₯κ° λ°μνμλ€.
λ€μκ³Ό κ°μ΄ λ¬Έμμ΄ μλ€μ λ¬Έμκ° μ«μμΈμ§ λ¬Έμμ΄μΈμ§μ λ°λΌμ μ μ 10μ ꡬλΆνμκ³ λ¬Έμ μμ΄ λμν¨μ νμΈνμλ€.
function solution(dartResult) {
var answer = 0;
let regExp = /[0-9]/;
let section = ['S', 'D', 'T'];
let scores = [];
let score = 0;
for(let i = 0; i < dartResult.length; i++) {
if(regExp.test(dartResult[i])) {
if(!regExp.test(dartResult[i - 1])) {
score = 0;
score = Number(dartResult[i]);
}
if(regExp.test(dartResult[i + 1])) score = Number(score + dartResult[i + 1]);
}
if(section.includes(dartResult[i])) {
score = Math.pow(score, section.indexOf(dartResult[i]) + 1);
if(regExp.test(dartResult[i + 1]) || !dartResult[i + 1]) scores.push(score);
}
if(dartResult[i] === '*') {
if(scores.length === 0) scores.push(score * 2);
else {
scores.push(score * 2);
scores[scores.length - 2] = scores[scores.length - 2] * 2;
}
}
if(dartResult[i] === '#') scores.push(-score);
}
answer = scores.reduce((a, b) => a + b);
return answer;
}
console.log(solution('1D2S#10S'));
λ€λ₯Έ μ¬λ νμ΄
function solution(dartResult) {
const bonus = {'S': 1, 'D': 2, 'T': 3};
let darts = dartResult.match(/\\d.?\\D/g);
for (let i = 0; i < darts.length; i++) {
let split = darts[i].match(/(\\d{1,})([SDT])([*#])?/),
score = Math.pow(split[1], bonus[split[2]]);
if (split[3] !== undefined) {
if (split[3] === '*') {
score *= 2;
if (i > 0) darts[i - 1] *= 2;
} else score *= -1;
}
darts[i] = score;
}
return darts.reduce((a, b) => a + b);
}
μ κ·ννμκ³Ό match() λ©μλλ₯Ό μ¬μ©νμ¬ 3λ²μ κΈ°νλ₯Ό λ°°μ΄λ‘ λλ μ μ΄ μ’μ κ² κ°λ€.
μ΄λ‘ μΈν΄ μ΄ν λ°λ³΅ μ°μ°μμ μμμ λ μ½κ² μ κ·Όν μ μμΌλ©° κ° κΈ°νμ λν μ°μ° κ³Όμ μ΄ λͺ νν΄μ§ μ½λλ₯Ό μμ±ν μ μμλ κ² κ°λ€.
λ€λ§ μ κ·ννμμ μ¬μ©μ μμ΄μ μ€μλ₯Ό νμ κ² κ°μλ°, /\d.?\D/g λ‘ μμ ν΄μΌμ§ μ λλ‘ λμνλ€.
(λ€μ split λ³μλ₯Ό μ μΈν λλ μμ¬λμ¬ νλλ₯Ό λΉΌμ€μΌ νλ€)
μ μλ₯Ό κ³μ°ν λ split[1]λΆν° μ°Έμ‘°νλ μ΄μ κ° κΆκΈν΄μ λ€μκ³Ό κ°μ΄ μ½μμΌλ‘ μ½λλ₯Ό μμ±νμ¬ μ½μλ‘ κ·Έ κ²°κ³Όκ°μ νμΈνμλ€.
let dartResult = '3D4T#2S*';
let darts = dartResult.match(/\d.?\D/g);
console.log(darts);
for(let i = 0; i < darts.length; i++) {
let split = darts[i].match(/(\d{1,})([SDT])([*#])?/)
console.log(split);
}
βΆ(3) ["3D", "4T#", "2S*"]
βΆ(4) ["3D", "3", "D", undefined]
βΆ(4) ["4T#", "4", "T", "#"]
βΆ(4) ["2S*", "2", "S", "*"]
κ²°κ³Όλ₯Ό νμΈν΄ 보λ match λ©μλλ‘ λλ λ°°μ΄μ 맨 μ²μ μΈλ±μ€ μμμλ νμ¬ μ°Έμ‘°λκ³ μλ λ¬Έμμ΄ κ·Έ μ체λ₯Ό λ°ννλ κ²μ μ μ μμλ€.
λ¬Έμμ΄μ΄ μ κ·μκ³Ό μΌμΉνλ©΄, μΌμΉνλ μ 체 λ¬Έμμ΄μ 첫 λ²μ§Έ μμλ‘ ν¬ν¨νλ Arrayλ₯Ό λ°νν λ€μ κ΄νΈ μμ μΊ‘μ²λ κ²°κ³Όκ° μ΅λλ€. μΌμΉνλ κ²μ΄ μμΌλ©΄ nullμ΄ λ°νλ©λλ€.
'μκ³ λ¦¬μ¦ > κΈ°μΆ λ° λ°±μ€ νμ΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[2018 KAKAO BLIND RECRUITMENT]λΉλ°μ§λ (0) | 2021.09.01 |
---|---|
[λ°±μ€ 1874λ²]μ€ν μμ΄ (0) | 2021.08.27 |
[λ°±μ€ 9012λ²]κ΄νΈ (0) | 2021.08.25 |
[λ°±μ€ 9093λ²]λ¨μ΄ λ€μ§κΈ° (0) | 2021.08.24 |
[λ°±μ€ 10828λ²]μ€ν (0) | 2021.08.24 |