문제
https://programmers.co.kr/learn/courses/30/lessons/17681?language=java
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
풀이
문제를 풀기 위한 알고리즘은 따로 필요하지 않고 진법 변환에 대한 메서드나 구현 방법을 알고 있으면 쉽게 풀 수 있을 것이다. 필자는 toBinaryString이라는 메서드를 사용하여 10진수를 2진수로 변환해 줬는데 이때 반환되는 문자열의 크기는 항상 n과 같아야 하지만 toBinaryString 메서드는 수의 따라 3자리, 4자리, 5자리 등 여러 자릿수로 변환되기 때문에 n과의 차이를 구해주어 그만큼 앞에 '0'을 추가해 주었다.
추가까지 완료된 문자열은 10진수가 2진수로 변환되었고, 길이가 n인 문자열 즉, 우리가 찾던 그 문자열이므로 두 문자열의 패턴에 따른 비교를 통해 line이라는 변수에 담아주고 문제를 해결할 수 있었다.
코드
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
System.out.println("dd");
for(int i = 0; i < n; i++) {
String temp1 = Integer.toBinaryString(arr1[i]);
String temp2 = Integer.toBinaryString(arr2[i]);
String change1 = "";
String change2 = "";
String line = "";
if(temp1.length() < n) {
int gap = n - temp1.length();
for(int j = 0; j < gap; j++) {
change1 += "0";
}
change1 += temp1;
}
else {
change1 = temp1;
}
if(temp2.length() < n) {
int gap = n - temp2.length();
for(int j = 0; j < gap; j++) {
change2 += "0";
}
change2 += temp2;
} else {
change2 = temp2;
}
for(int k = 0; k < n; k++) {
if(change1.charAt(k) == '0' && change2.charAt(k) == '0') {
line += ' ';
}
if(change1.charAt(k) == '1' || change2.charAt(k) == '1') {
line += '#';
}
}
answer[i] = line;
}
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 프로그래머스 Level2 땅따먹기 Java (0) | 2022.05.18 |
---|---|
[프로그래머스] 프로그래머스 Level2 최솟값 만들기 Java (0) | 2022.05.18 |
[프로그래머스] 프로그래머스 Level1 실패율 Java (카카오 코딩테스트) (0) | 2022.05.06 |
[프로그래머스] 프로그래머스 Level1 모의고사 Java (0) | 2022.05.06 |
[프로그래머스] 프로그래머스 Level3 정수 삼각형 Java (0) | 2022.05.06 |