카테고리 없음
프로그래머스#55(Lv.1)_[1차] 비밀지도
개발자_조이킴
2021. 11. 11. 17:03
[1차] 비밀지도 - 2018 KAKAO BLIND RECRUITMENT
다른 분들이 하신것 보고 배우고 또 배우자! (삼항연산자, padStart 메소드, replace 메소드, repeat 메소드!)
// 프로그래머스 - [1차] 비밀지도 function solution(n, arr1, arr2) { // 암호화를 푼 숫자를 담아줄 빈배열 선언 (2진수로 표현된 숫자가 들어간다) let solvedArr1 = [] let solvedArr2 = [] // 먼저, 1차 비밀지도의 암호화를 푼다 for(let i = 0; i < arr1.length; i++) { // 2진수로 표현하기 위한 초기틀을 만들어준다. 초기틀은 n개의 0으로 이뤄져있다. // ex) n = 5, zeros = [0, 0, 0, 0, 0] let zeros = new Array(n).fill(0) // i번째 요소 (숫자)를 curVal에 할당해준다 let curVal = arr1[i] // 만약 curVal가 0이라면, 암호화를 따로 풀 필요없다. // 바로 solvedArr1에 '00000' 2진법 수를 넣어준다. (n=5이라면) if(curVal === 0) solvedArr1.push(zeros.join("")) // 만약 curVal가 1이라면, 암호화를 따로 풀 필요없다. // 바로 solvedArr1에 '00001' 2진법 수를 넣어준다. (n=5이라면) else if(curVal === 1) { zeros[n-1] = 1 solvedArr1.push(zeros.join("")) } // 이외의 경우는 따로 2진법 수를 찾아야한다. (암호를 풀어야한다) else { // while 루프문 한바퀴 돌때마다, index 변경하기 위한 cnt를 선언 // cnt는 루프가 한번 돌때마다 1씩 증가한다. let cnt = 0; // 루프는 curVal가 1이거나, 0이면 종료된다. // 아래 while문은 2진법 수를 구하고, 이를 저장한다. while(curVal !== 1 && curVal !== 0) { // 현재 index let idx = n - 1 - cnt // 현재 값을 2로 나누었을 때, 나머지 let remainder = curVal % 2 // 나머지를 zeros 맨 끝 idx부터 넣어준다. // ex) n = 5라면, idx는 4, 3, 2, 1, 0 순이된다. zeros[idx] = remainder // next step의 curVal를 다시 설정해준다. curVal = parseInt(curVal / 2) cnt++ // 만약 curVal가 1이면 while문을 종료시킨다. // 또한, 현재 idx의 앞에 1을 할당해준다. if(curVal === 1) { zeros[idx-1] = 1 break; } } // while문이 종료되면 암호화를 푼 2진법 수를 solvedArr1에 넣어준다. solvedArr1.push(zeros.join("")) } } // 1차 지도와 마찬가지로, 암호화된 2차 지도도 풀어준다. for(let i = 0; i < arr2.length; i++) { let curVal = arr2[i] let zeros = new Array(n).fill(0) if(curVal === 0) solvedArr2.push(zeros.join("")) else if(curVal === 1) { zeros[n-1] = 1 solvedArr2.push(zeros.join("")) } else { let cnt = 0; while(curVal !== 1 && curVal !== 0) { let idx = n - 1 - cnt let remainder = curVal % 2 zeros[idx] = remainder curVal = parseInt(curVal / 2) cnt++ if(curVal === 1) { zeros[idx-1] = 1 break; } } solvedArr2.push(zeros.join("")) } } // ********** arr1, arr2, 2분법으로 변환 완성 ********** // // 최종 결과(해독된 지도)를 담아줄 빈배열 result 선언 let result = [] // 1차, 2차 지도를 통해 진짜 지도를 찾는다. for(let i = 0; i < solvedArr1.length; i++) { let str = '' for(let j = 0; j < n; j++) { // 1차, 2차 지도 i번째 요소의 j번째 요소를 각각 value1과 value2에 할당한다. let value1 = Number(solvedArr1[i].split("")[j]) let value2 = Number(solvedArr2[i].split("")[j]) // 만약 1차지도와 2차지도 모두 0인 경우, 해당 요소는 빈 문자열을 넣어준다. if(value1 === 0 && value2 === 0) str = str + ' ' // 이외의 경우, 해당 요소는 벽돌(#)을 넣어준다. else str = str + '#' } // 해독된 i번째 요소를 result에 넣어준다. result.push(str) } return result } |
<다른분의 solution>
![]() ![]() ![]() |
프로그래머스 1단계 마지막 문제였다.
1단계 풀면서, 좌절감과 자신감 둘다 얻었다.
공부하면서 늘 머릿속에 맴도는 문장은
아직도 멀었다!
이었다.
늦게 시작한 만큼, 아직도 갈 길이 멀었지만
초심을 기억하며,
포기하지말고 계속해서 공부하자!
화이팅:)