728x90
반응형
이번 글은 아래 링크의 글들을 참조하여 작성하였습니다.
https://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
https://onlydev.tistory.com/57
이번 문제에 대한 자세한 사항은 다음 링크를 참조하길 바란다.
처음에 보고 지레 겁을 먹었다가 즐겜하자는 마인드로 접근해서 하나하나 풀어나갔더니 정답이 나왔다! for문으로 도배가 되어 있어 난장판이 되어 있던 코드를 30분 정도 시간을 들여 중복되는 부분을 지우고 다듬으니 훨씬 보기 좋아졌다.
해당 문제를 풀 적에 문제에서 요구하는 대로 10진수를 2진수로 올바르게만 변환한다면 반 이상을 해결했다 봐도 과언이 아니다. 핵심 개념은 10진수를 2진수로 변환하는 toString() 메서드와 문자열의 길이가 n이 될 때까지 앞에서부터 0을 채워넣는 padStart() 혹은 repeat() 메서드이다. 이후에는 문자열의 0 및 1을 각각 공백과 '#'으로 치환하고 결괏값을 도출해내면 된다. 나의 경우 2진수로 된 문자열을 공백 및 '#'으로 치환한 후, 두 배열을 비교하면서 값이 다를 경우 '#'을 정답 배열에 push하고 값이 같을 경우 해당 값을 정답 배열에 push하는 식으로 풀었다.
늘 그렇듯 Solution 1에는 나의 해답을, Solution2에는 개발 전용차선님의 블로그에 포스팅된 해답을 제시하겠다.
Solutions
Solution 1.
const n = 5; const arr1 = [9, 20, 28, 18, 11]; const arr2 = [30, 1, 21, 17, 28]; // const n = 6; // const arr1 = [46, 33, 33, 22, 31, 50]; // const arr2 = [27, 56, 19, 14, 14, 10]; console.log(solution(n, arr1, arr2)); function solution(n, arr1, arr2) { const answer = []; for (let i = 0; i < n; i++) { answer.push([]); } let numArr1 = arr1; let numArr2 = arr2; for (let i = 0; i < n; i++) { let binary1 = arr1[i] .toString(2) .padStart(n, 0) .replace(/0/g, ' ') .replace(/1/g, '#'); let binary2 = arr2[i] .toString(2) .padStart(n, 0) .replace(/0/g, ' ') .replace(/1/g, '#'); numArr1[i] = binary1; numArr2[i] = binary2; for (let j = 0; j < n; j++) { numArr1[i][j] !== numArr2[i][j] ? answer[i].push('#') : answer[i].push(numArr1[i][j]); } answer[i] = answer[i].join(''); } return answer; }
Solution 2.
const n = 5; const arr1 = [9, 20, 28, 18, 11]; const arr2 = [30, 1, 21, 17, 28]; // const n = 6; // const arr1 = [46, 33, 33, 22, 31, 50]; // const arr2 = [27, 56, 19, 14, 14, 10]; console.log(solution(n, arr1, arr2)); function solution(n, arr1, arr2) { const answer = []; for (let i = 0; i < n; i++) { let result = ''; const binary1 = '0'.repeat(n - arr1[i].toString(2).length) + arr1[i].toString(2); const binary2 = '0'.repeat(n - arr2[i].toString(2).length) + arr2[i].toString(2); // const binary1 = arr1[i].toString(2).padStart(n, 0); // const binary2 = arr2[i].toString(2).padStart(n, 0); for (let j = 0; j < n; j++) { binary1[j] === '1' || binary2[j] === '1' ? (result += '#') : (result += ' '); } answer.push(result); } return answer; }
함께 보기
728x90
반응형
'👩💻 Programming > Coding Test 문제 풀이' 카테고리의 다른 글
[Programmers] level 2: 오픈채팅방 by JavaScript (0) | 2022.07.01 |
---|---|
[Programmers] level 1: 다트게임 by JavaScript (0) | 2022.06.30 |
[Programmers] level 1: 신규 아이디 추천 by JavaScript (0) | 2022.06.29 |
[Programmers] level 1: 키패드 누르기 by JavaScript (0) | 2022.06.29 |
[Programmers] level 1: 숫자 문자열과 영단어 by JavaScript (0) | 2022.06.29 |
댓글