Algorithm/Java

프로그래머스 - [1차] 비밀지도 java :: 2018 KAKAO BLIND RECRUITMENT

고고마코드 2022. 7. 2. 19:02
반응형
17681번

https://programmers.co.kr/learn/courses/30/lessons/17681?language=java 

 

코딩테스트 연습 - [1차] 비밀지도

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr


풀이

이 예시만 봐도 문제의 핵심을 알 수 있습니다.

문제의 핵심을 OR 연산 입니다.

두 이진수의 or 연산은 하나라도 참일 경우 참으로 인지하기 때문에 결과와 같은 값을 구할 수 있습니다.

1 or 0 = 1

0 or 1 = 1

 

비트 연산만 알고 있다면 쉽게 풀 수 있는 문제입니다.

  • 풀이
class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
		String[] answer = new String[n];
		for(int i=0; i<n; i++) {
			String orBinaryStr = Integer.toBinaryString(arr1[i] | arr2[i]);
			while(orBinaryStr.length() < n) {
				orBinaryStr = " "+orBinaryStr;
			}
			orBinaryStr = orBinaryStr.replaceAll("1", "#").replaceAll("0", " ");
			answer[i] = orBinaryStr;
		}
        
        return answer;
    }
}

원리만 알면 쉬우므로 핵심 몇 개만 설명하겠습니다.

 

✅ 비트 연산자 '|'

: OR 연산

Integer.toBinaryString()

: 정수의 2진수를 String 타입으로 반환

✅ String replaceAll(String regex, String replacement)

: 문자열 내의 regex 를 replacement 로 치환합니다.

: 참고로 regex 에는 단순 문자열이 올 수도 있지만 정규식을 활용할 수도 있습니다.

 

✔️ 테스트 케이스 처리속도: 평균 1.5ms / 최대 2.87ms

반응형