https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
이번문제는 이진수 변환 관련 문제라고 보면된다.
이진수로 변환을 어떻게 할지만 풀수 있으면 생각보다 어렵지 않다.
다만 정말 사람마다 푸는 방법은 각양 각색이다. 코딩의 세계는 무궁무진하다. 보면서 나도 많은 것을 배운다.
특히, 재귀함수로 푸시는 분은 아주 기가막혔다.
[알고리즘 Flow]
1. 각 지도의 2진수 결과를 담을 배열을 선언한다.
2. 2진수로 변환한 값을 # or 공백의 형태로 배열에 넣어준다.
3. 각 배열의 문자형을 비교하여 둘 중 하나라도 #이면 #을 둘 다 공백이면 공백을 += 하여 answer배열에 넣어준다.
4. answer 출력
[결과코드]
package com.level01;
public class secretMap {
public static void main(String[] args) {
int [] arr1 = {9, 20, 28, 18, 11};
int [] arr2 = {30, 1, 21, 17, 28};
solution(5, arr1, arr2);
}
public static String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String [n];
// 각 지도의 2진수 결과를 담을 배열을 선언해준다.
String [] map1 = new String [n];
String [] map2 = new String [n];
// 2진수로 변환한 값을 # or 공백의 형태로 넣어준다.
for (int i = 0; i < map1.length; i++) {
map1[i] = getBinary(arr1[i], n);
map2[i] = getBinary(arr2[i], n);
}
String res = "";
// 각 배열의 문자형을 비교하여 둘 중 하나라도 #이 있으면 #을 둘다 없으면 공백을 추가해준 후에 answer배열에 리턴한다.
for (int i = 0; i < map2.length; i++) {
for (int j = 0; j < map2.length; j++) {
if (map1[i].charAt(j) == '#' || map2[i].charAt(j) == '#') {
res += "#";
} else {
res += " ";
}
}
answer[i] = res;
res = "";
}
return answer;
}
private static String getBinary(int num, int n) {
// 2진수로 변환한 값을 비교하여 # or 공백을 넣는 메소드
String temp = Integer.toBinaryString(num);
String res = "";
int count = 0;
for (int i = 0; i < n; i++) {
if (n - i > temp.length()) {
res += " ";
} else {
if (temp.charAt(count) == '1') {
res += "#";
} else {
res += " ";
}
count++;
}
}
count = 0;
return res;
}
}
이번 문제의 포인트는
1. 이진수로 변환을 어떻게 할 것인가?
나는 Integer.toBinaryString(int n) 이라는 메소드를 사용하였다.
2. 지도 한 변의 크기를 어떻게 할 것인가?
for 문을 이용하여 한 변의 크기 - i의 값이 이진수로 변환한 값의 길이보다 클때까지는 공백을 추가해주었고,
같게 되는 순간부터는 이진수 결과의 값을 비교하여주었다.
[깃허브]
https://github.com/RUCKUSJERRY/practiceOfJava/blob/main/Prs_Pratice/src/com/level01/secretMap.java
RUCKUSJERRY/practiceOfJava
Contribute to RUCKUSJERRY/practiceOfJava development by creating an account on GitHub.
github.com
'문제풀이 > 프로그래머스' 카테고리의 다른 글
약수의 개수와 덧셈 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.06.11 |
---|---|
내적 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.06.10 |
폰켓몬 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.06.08 |
키패드 누르기 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.06.07 |
실패율 / 프로그래머스 연습문제 / programmers / level1 / javascript (0) | 2021.05.15 |