본문 바로가기

카테고리 없음

[카카오 코딩 연습] "비밀 지도" 연습

[출처: https://t1.daumcdn.net/friends/www/resources/images/m640/bg_char.jpg]


* 다음 글은 개인적 코딩 연습과 훈련을 위해서 올린글이며 이미 카카오 페이지에 올려진 블로그글을 참조해서 적은 글이오니 모든 카카오 관련 저작권은 카카오 (주) 에 있고 문제가 되면 바로 내리겠습니다.


카카오는 한국 최고의 소프트웨어 기업중에 하나인 만큼 개발자 위주로 인터뷰를 보고 그에 따라 인터뷰도 구글, 마이크로소프트, 아마존같은 회사처럼 코딩 위주로 공평하게 인터뷰를 낸다고 알려져 있습니다. 최근에 한국 기업에 일하고 싶은 마음이 생겨 카카오 테크 블로그에 올려져 있는 블로그를 참고 인터뷰 코딩 연습을 하게 되었습니다. 다음 링크는 카카오 테크 블로그에 올려온 글입니다.


http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/


여기에 있는 문제를 차곡차곡 풀어보며 연습을 마무리 할 계획입니다. 첫번째 문제는 "비밀 지도" 이며 2D array 를 이용한 비트 연산 (bitwise operator) 에 관련된 문제였습니다. 문제 난이도가 "하"이고 80프로 이상이 풀었던 만큼 이해하기에 어려운점은 없었지만 코딩 실력이 녹쓸어서 생각보다 많은 시간이 걸리긴 하였습니다.


접근방식:

주어진 문제를 읽고 아래 추간된 그림을 먼저 이해할려고 했습니다. 이진법은 0-9 로 이루어진 십진법과 달리 0 과 1 로만 구성되어 있는데 2^0 = 1, 2^1 = 2, ... 2^5 = 32 등등 숫자를 계산할때 2 베이스로 계산합니다. 예를 들어 11은 11 - 8 (=2^3) = 3 - 2 (= 2^1) = 1 - 1 (=2^0) 이므로 11 은 이진법으로 1011 가 됩니다. 두개의 지도가 주어지는데 겹치게 되면 1의 표현인 # ("벽") 이 빈칸을 체우기 때문에 이걸 비트 연산으로는 OR bitwise operation 이 됩니다.


스스로 이해가 필요함으로 이렇게 펜으로 종이에 계산해보았습니다.



몇번 해보니 감을 잡은것 같아서 샘플 출력 값과 비교해서 계산해 보았습니다. 다음 pseudocode 를 적기 시작했습니다. 


먼저 함수를 부분별로 구분하는게 좋을것 같아 이렇게 전체적인면에서 적고...



이렇게 함수도 적어보았습니다.



어느정도 답을 알았으니 이제 코딩으로 적었습니다.



답:


Mac 을 쓰기 때문에 Console 로 cd 해서 간단하게 "KakaoInterviewPractice" 란 폴더를 만들고 VIM 을 써서 "vim SecretMap.java" 라 이름으로 자바 파일을 만든후 몇가지 기본틀을 적었습니다. 그런다음 ATOM 에디터로 파일을 오픈해서 pseucode 를 코드로 변경. 몇번의 "javac SecretMap.java" 로 콤파일 한후 


java SecretMap 6 "[46,33,33,22,31,50]" "[27,56,19,14,14,10]"


다음식으로 성공적으로 출력됩니다.


["######","###  #","##  ##","#### ","#####","### # "]


전체 답은 GITHUB 에 올렸습니다.


https://github.com/bryantson/KakaoSampleProblemsPractice/blob/master/SecretMap.java



마치며...

그렇게 어려운 문제는 아니였지만 룹을 여러번 네스티드 해서 썼고 여러가지 바운더리 케이스를 테스트 안한 만큼 효과적인 모범답이라고 보긴 어렸습니다. 또한 녹쓴 코딩 연습상 상당히 오래걸렸고 아마 다시 방문한다면 조금더 신속하게 이해하지 않았을까 아쉬움이 들었습니다.