카카오 코딩테스트 문제1 Java, Python
오늘 프로그래머스에서 카카오 블라인드 채용 테스트를 했다.
저는 굉장히 허접이라서 경험삼아 도전해 보았는데, 문제1번만 풀었다..
문제는 총 7문제이고 언어는 C++, Java, Python, JavaScript, Swift 이렇게 5개로 풀 수있다.
그래서 총 7 x 5 = 35 문제라고 할 수 있다.
문제1번을 Java랑 Python 2가지 언어로 풀었는데, 1시간 30분 걸렸다...
총 5시간 300분 중에 90분을 썼는데, 2가지 언어로 풀고 나니까 현자타임(?)이 와서 그만 두었다. 그래서 제가 java,python으로 푼 1번 문제 코드만 블로깅 해볼려고 합니다.
1번문제는 아래와 같아요.
이거를 그대로 써도 될지 잘모르겠는데,, 저작권같은거에 걸릴까봐 겁나긴 하는데
그냥 올려봅니다.
출처: <https://programmers.co.kr/tryouts/1255/challenges/4412?language=java>
문제 설명
저는 굉장히 허접이라서 경험삼아 도전해 보았는데, 문제1번만 풀었다..
문제는 총 7문제이고 언어는 C++, Java, Python, JavaScript, Swift 이렇게 5개로 풀 수있다.
그래서 총 7 x 5 = 35 문제라고 할 수 있다.
문제1번을 Java랑 Python 2가지 언어로 풀었는데, 1시간 30분 걸렸다...
총 5시간 300분 중에 90분을 썼는데, 2가지 언어로 풀고 나니까 현자타임(?)이 와서 그만 두었다. 그래서 제가 java,python으로 푼 1번 문제 코드만 블로깅 해볼려고 합니다.
1번문제는 아래와 같아요.
이거를 그대로 써도 될지 잘모르겠는데,, 저작권같은거에 걸릴까봐 겁나긴 하는데
그냥 올려봅니다.
출처: <https://programmers.co.kr/tryouts/1255/challenges/4412?language=java>
문제 설명
비밀지도
네오는 평소
프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를
해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.
- 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다.
- 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
- "지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다.
- 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.
네오가
프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.
입력 형식
입력으로 지도의 한 변 크기 n 과
2개의 정수 배열 arr1, arr2가 들어온다.
- 1 ≦ n ≦ 16
- arr1, arr2는 길이 n인 정수 배열로 주어진다.
- 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.
출력 형식
원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.
입출력 예제
매개변수
|
값
|
n
|
5
|
arr1
|
[9, 20, 28, 18, 11]
|
arr2
|
[30, 1, 21, 17, 28]
|
출력
|
["#####","# #
#", "### #", "# ##", "#####"]
|
매개변수
|
값
|
n
|
6
|
arr1
|
[46, 33, 33 ,22, 31, 50]
|
arr2
|
[27 ,56, 19, 14, 14, 10]
|
출력
|
["######",
"### #", "## ##", " #### ", " #####",
"### # "]
|
먼저 Java코드
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String[] map1 = new String[n];
String[] map2 = new String[n];
for (int i =0; i<map1.length; i++){
map1[i] = Integer.toBinaryString(arr1[i]);
while(map1[i].length()<n){
map1[i] = "0" +map1[i];
}
}
for(int i = 0; i<map2.length; i++){
map2[i] = Integer.toBinaryString(arr2[i]);
while(map2[i].length()<n){
map2[i] = "0" +map2[i];
}
}
char[] result = new char[n];
for (int i=0; i<map1.length; i++){
char[] temp = map1[i].toCharArray();
char[] temp2 = map2[i].toCharArray();
for(int a =0; a<temp.length; a++){
if(temp[a]=='1'|| temp2[a]=='1'){
result[a]='1';
}else if(temp[a]=='0'&& temp2[a]=='0'){
result[a]='0';
}
}
String s =new String(result);
answer[i]=s;
}
for(int i=0;i<answer.length; i++){
char[] temp = answer[i].toCharArray();
for(int a =0; a<temp.length;a++){
if(temp[a]=='1'){
temp[a]='#';
}else if(temp[a]=='0'){
temp[a]=' ';
}
String s = new String(temp);
answer[i] =s;
}
}
return answer;
}
}
그 다음 python 코드
def solution(n, arr1, arr2):
answer = []
for i in range(0,len(arr1)):
arr1[i] = bin(arr1[i])
arr1[i] = arr1[i][2:]
if(len(arr1[i])<n):
while(len(arr1[i])<n):
arr1[i] = "0"+arr1[i]
for i in range(0,len(arr2)):
arr2[i] = bin(arr2[i])
arr2[i] = arr2[i][2:]
if (len(arr2[i]) < n):
while (len(arr2[i]) < n):
arr2[i] = "0" + arr2[i]
for i in range(0,n):
temp = ""
for j in range(0,n):
if(arr1[i][j]=="1" or arr2[i][j]=="1"):
temp += "1";
if(arr1[i][j] =="0" and arr2[i][j] == "0"):
temp+="0"
answer.append(temp)
for i in range(0,n):
temp =""
for j in range(0,n):
if(answer[i][j]=="1"):
temp += "#"
if(answer[i][j]=="0"):
temp += " "
answer[i] = temp
return answer
==========================================================
일년전 문제를 다시 한 번 풀어봤다.. 지금은 2018.09.15
public static String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for(int i = 0 ; i<n; i++) {
answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
}
return answer;
}
비트연산을 통해서 스트링으로 변환해주는 작업만 해주는것을 여러개의 for문을
사용해서 짰었던 것을 1년 전만 해도 정말 모르는게 많구나, 그리고 지금도 내가 모르는것들이 많다는것을 느꼈다.
==========================================================
일년전 문제를 다시 한 번 풀어봤다.. 지금은 2018.09.15
public static String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for(int i = 0 ; i<n; i++) {
answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
}
return answer;
}
비트연산을 통해서 스트링으로 변환해주는 작업만 해주는것을 여러개의 for문을
사용해서 짰었던 것을 1년 전만 해도 정말 모르는게 많구나, 그리고 지금도 내가 모르는것들이 많다는것을 느꼈다.
댓글
댓글 쓰기