이번 글은 아래 링크의 글들을 참조하여 작성하였습니다.
https://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/
카카오 신입 공채 1차 코딩 테스트 문제 해설
‘블라인드’ 전형으로 실시되어 시작부터 엄청난 화제를 몰고 온 카카오 개발 신입 공채. 그 첫 번째 관문인 1차 코딩 테스트가 지난 9월 16일(토) 오후 2시부터 7시까지 장장 5시간 동안 온라인
tech.kakao.com
https://onlydev.tistory.com/57
[프로그래머스] 비밀 지도 | 카카오 블라인드 코딩 테스트 | JavaScript
비밀지도 문제 설명 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해
onlydev.tistory.com
이번 문제에 대한 자세한 사항은 다음 링크를 참조하길 바란다.
처음에 보고 지레 겁을 먹었다가 즐겜하자는 마인드로 접근해서 하나하나 풀어나갔더니 정답이 나왔다! 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; }
함께 보기
Object.prototype.toString() - JavaScript | MDN
The toString() method returns a string representing the object.
developer.mozilla.org
String.prototype.repeat() - JavaScript | MDN
The repeat() method constructs and returns a new string which contains the specified number of copies of the string on which it was called, concatenated together.
developer.mozilla.org
String.prototype.padStart() - JavaScript | MDN
The padStart() method pads the current string with another string (multiple times, if needed) until the resulting string reaches the given length. The padding is applied from the start of the current string.
developer.mozilla.org
'👩💻 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 |
댓글