송민준의 개발노트

프로그래머스-level1-비밀지도 본문

알고리즘/프로그래머스

프로그래머스-level1-비밀지도

송민준 2019. 11. 11. 01:02

https://programmers.co.kr/learn/courses/30/lessons/17681

 

코딩테스트 연습 - [1차] 비밀지도 | 프로그래머스

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 공백(" ) 또는벽(#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 지도 1과 지도 2라고 하자. 지도 1

programmers.co.kr

내가 풀었던 것은 테스트케이스 3번이 틀렸고 원인을 찾지 못했다 ㅠㅠㅠ

뭐가 문제인 것이냐... 뭐 일단 이렇게 푸는 것도 아니지만....

 

 

 

다른 사람 코드

Integer 클래스에서는 2진수로 변환해주는 것, 8진수 16진수 변환을 지원해준다...(String 타입으로)

2진수로 변환한 것을 or 연산자를 써준다.

OR연산자를 써주고 2진수로 변환된 것을 공백과 #으로 변환해준다.

 

다만 길이가 n만큼이 되어야 하는데 안채워진 부분은 따로 메소드를 선언해줘서 공백을 채워준다

(앞에서 채워주는 이유는 2진수의 특정)

 public String[] solution(int n, int[] arr1, int[] arr2 ) {
		 	String[] answer = new String[n];
		    for (int i = 0; i < n; i++) {
		        answer[i] = checkFormat(Integer.toBinaryString(arr1[i] | arr2[i]).replace("0", " ").replace("1", "#"), n);
		    }
		    return answer;
	 }
	 private String checkFormat(String binaryString, int n) {
		    while (binaryString.length() < n) {
		    	System.out.println("변경전 " + binaryString);
		        binaryString = " " + binaryString;
		    }
		    return binaryString;
	 }