-
[백준 Node.js/Javascript] 5622번 다이얼To infinity/Coding Practice 2021. 6. 27. 09:50
2021.06.27
Question
Answer code
내가 짜고싶었던 코드
(참고: 감공사님 블로그 https://dpsc615.tistory.com/72?category=817305)
let input = `UNUCIC`.toString().split(''); let charMap = {}; let charStack = ''; let counter = 3; for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(); i++) { charStack += String.fromCharCode(i); if( charStack.length === 3 && //받은 문자의 길이가 3 i !== 'R'.charCodeAt(0) && //길이가 W3기 되기 전에 차단 i !== 'Y'.charCodeAt(0) ) { charMap[charStack] = counter; //받은 문자를 3씩 잘라서 객체에 넣음 counter++; //넣을 값은 counter고, 다음번 값을 위해 3을 더 더해줌 charStack = '' //그리고 charstack은 다시 초기화를 시켜줌 } else if (charStack.length === 4) { //받은 문자의 길이가 4일때 charMap[charStack] = counter; counter++; charStack='' } } let result = input.reduce((acc,char) => { for (let stage in charMap) { if(stage.includes(char)) { acc += charMap[stage]; } } return acc; },0) console.log(result);
현실
let input = `WXS01`.toString().split('') //각 다이얼에 대한 처리 function dial(num){ let result = 0 if(num > 64 && num <= 67) result += 3 else if(num > 67 && num <= 70) result += 4 else if(num > 70 && num <= 73) result += 5 else if(num > 73 && num <= 76) result += 6 else if(num > 76 && num <= 79) result += 7 else if(num > 79 && num <= 83) result += 8 else if(num > 83 && num <= 86) result += 9 else if(num > 86 && num <= 90) result += 10 else result += 0 return result; } //0과 1에 대해선 처리 안하나? // 다이얼 입력 console.log(input.length) let sum = 0 for(let i = 0; i < input.length; i++ ){ sum += dial((input[i].charCodeAt())) } console.log(sum);
How to solve?
1. A-Z까지 나누고 싶어.
- 문자를 받아서 변수에 넣는다. 그 길이가 내가 원하는 길이가 되면 새로운 객체에 해당 문자를 '프로퍼티키'로, 그리고 원하는 값을 '프로퍼티 값'으로 할당한다.
- 그리고 변수를 다시 리셋시킨다.
- 예외처리는 !로
2. 받은 값 A가 B구간에 있는지 확인하고 싶어.
reduce 사용할 때, '내가 받은 변수값'.reduce((acc, cur)) 을 쓰고, 이 안에서 for..in문을 통해 B구간 안에 A가 있는지를 확인하면 된다.(include 사용)
아, 내가 계속 문제풀면서 reduce사용해서 받은 값 A를 B구간에서 어떻게 확인하는가를 궁금해했는데 이렇게 해결되다니. 행복하다.ㅎㅎ 해당 스킬을 앞으로의 문제에 써먹어야지.
Feedback
처음 문제를 읽었을 때, 각각 숫자의 범위를 지정해서 코드를 짜기보다는 조건을 걸어서 코드를 짜고 싶었다.
그러니까, 함수로 ABC,DEF... 범위를 나누고 해당 범위에 값을 넣어서 출력하고 싶었단거다.
근데 아 왜 이렇게 머리가 안 굴러갈까.
결국 수작업하는 방법으로 넣었는데 저 방법은 정말 '답을 맞추기 위한 코드' 일 뿐이지 그다지 내가 짜고싶은 코드는 아니었다.
처음에 charcode를 이용해서 받아오는 input값을 판별해 charcode로 변환해서 값을 도출하는 방식으로 코드를 짰는데 그 '범위지정'이라는 걸 어떤식으로 표현해야할지를 모르겠더라.
근데 감공사님 블로그에서 그 답을 찾았다.
객체로 넣어서 값을 불러왔다. 안그래도 저번 문제에서 객체의 프로퍼티키를 이용해서 값을 찾아오는 방법을 터득했기에 해당 코드가 상당히 반갑게 다가왔다.
연습해야지.
'To infinity > Coding Practice' 카테고리의 다른 글
[백준 Node.js/Javascript] 1152번 단어의 개수 (0) 2021.06.27 [백준 Node.js/Javascript] 2941번 크로아티아 알파벳 (0) 2021.06.27 [백준 Node.js] 1157번 단어공부 (0) 2021.06.26 [백준 Node.js] 2908번 상수 (0) 2021.06.26 [백준 Node.js] 10809번 알파벳 찾기 (Feat. 아스키코드) (0) 2021.06.26