-
[백준 Node.js/Javascript] 1193번 분수찾기To infinity/Coding Practice 2021. 6. 29. 19:50
2021.06.29
Question
Answer code
let fs = require('fs'); let N = fs.readFileSync('/dev/stdin').toString().map(el=>+el) let line = 0; let maxValue = 0; //N의 범위의 최대값이 나올 때 까지 while ( maxValue < N) { line++ maxValue += line; } let idx = N - (maxValue - line); if (line % 2 == 0) { child = idx; parents = (line + 1) - child; } else { child = ( line + 1 ) - idx; parents = ( line + 1 ) - child; } console.log( child + '/' + parents)
How to solve?
처음에 문제 제목을 봤을 때, 분수찾기라고 해서 물줄기가 뿜어져 나오는 분수 (fountain) 를 생각했다.
해당 문제의 규칙을 찾는 것이 먼저가 되어야겠지.
1. 분자값으로만 보자면 이 전 값에 순서대로 1,2,3,4....를 더해가는 것을 볼 수 있다.
그 증가분은 라인넘버와 일치한다.
2. 분자만 봤을 때 라인넘버 짝수를 기준으로는 순방향으로, 홀수는 기준으로는 역방향으로 숫자가 나열되고 있다.
3. 각 라인의 합계액은 해당라인에 존재할 수 있는 값의 최대값이 되고, 최대값에서 증가분(라인넘버)를 빼면 해당라인의 최소값이 된다. 따라서, 주어진 수(input)에서 최소값을 차감하게 되면 그 수가 바로 해당라인에서 주어진 수가 존재하는 위치번호가 된다. (1부터 시작했을 때 인덱스 넘버)
4. 2번에서 말했듯이 라인넘버가 짝수인지 홀수인지에 따라서 분자값을 산출하는 로직이 다르기에 조건으로 나눠서 각각 조건에 맞도록 넣어준다.
Feedback
//첫번째 시도. 배열 만들어서 reverse. let idx = N - (maxValue-increase); let parents = []; for ( i = 1; i <= increase; i++ ) { parents.push(i) } let parentsValue = parents[idx-1]; let childValue = parents.reverse()[idx-1]; //악.. reverse하니까 원본도 바뀌네... //변수에 넣어도 바뀌는구나..ㅠㅠ // 오 됐다. let result = childValue + '/' + parentsValue; console.log(result);*/
첫번째 시도는 배열을 만들어서 해당 배열을 reverse시키면 될 것이라 생각했다.
그런데 내가 여기서 간과한 사실은, 라인이 항상 순서대로 가는 것이 아니라 역방향으로 번갈아가며 돈다는 것이었다. (위에 풀이에서 2번설명)
그래서 N의 최대범위나오는 것 까지는 동일한데, 그 다음작업을 위와같이 처리했다.
근데 여기서 또 알게 된건 Array.prototype.reverse() 함수를 쓰게되면 원본배열이 함께바뀐다는 것이었다.
그래서 혹시 다른 변수에 넣어서 해당 변수를 바꾸면 괜찮지 않을까? 라고 했지만 아 역시나 변수에 넣어도 원본이 바뀌었다.
그래서, 최종적으로 생각한것은 원본배열을 먼저 다른 변수 안에 할당해서 값을 새로운 곳으로 고정시켜주고 아예 원본배열을 바꿔버렸더니 작동이 됐다.
하지만 위에서 간과한 사실 때문에 오답^^ 역시, 문제를 제대로 파악하는 것이 가장 중요하다.
'To infinity > Coding Practice' 카테고리의 다른 글
[백준 Node.js/Javascript] 2775번 부녀회장이 될테야! (0) 2021.07.02 [백준 Node.js/Javascript] 2869번 달팽이는 올라가고 싶다. (0) 2021.06.29 [백준 Node.js/Javascript] 2292번 벌집 (0) 2021.06.28 [백준 Node.js/Javascript] 1152번 단어의 개수 (0) 2021.06.27 [백준 Node.js/Javascript] 2941번 크로아티아 알파벳 (0) 2021.06.27