프로그래머스 비밀지도 JAVA 풀이 (비트연산, 문자열 변환)

2026. 6. 9. 17:26·코테(Solved.ac + Programmers)
728x90

📌 문제 링크

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📌 문제 개요

두 개의 지도를 겹쳐서 하나의 비밀지도를 만드는 문제다.

각 지도는 정수 배열로 주어지고, 각 정수를 이진수로 변환했을 때 1은 벽, 0은 공백을 의미한다.

 

두 지도 중 하나라도 벽인 위치는 최종 지도에서도 벽 #이 되고, 두 지도 모두 공백인 위치만 공백 " "이 된다.


📌 접근 방법

이 문제는 두 지도를 한 줄씩 비교하면 된다.

예를 들어 첫 번째 줄이 다음과 같다고 하면,

arr1 = 01001
arr2 = 11110

두 지도 중 하나라도 1이면 벽이므로 OR 연산을 사용한다.

01001
11110
-----
11111

결과 이진수에서 1은 #, 0은 공백으로 바꾸면 된다.


📌 핵심 아이디어

핵심은 arr1[i] | arr2[i]이다.

String binary = Integer.toBinaryString(arr1[i] | arr2[i]);

 

|는 비트 OR 연산자 : 두 비트 중 하나라도 1이면 결과가 1이 된다.

따라서 두 지도 중 하나라도 벽인 위치를 자연스럽게 찾을 수 있다.

다만 Integer.toBinaryString()은 앞자리 0을 제거한다.

0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1

예를 들어 9를 이진수로 바꾸면 01001이 아니라 1001이 나온다.

그래서 지도 크기 n에 맞게 앞쪽에 0을 채워야 한다.

while (binary.length() < n) {
    binary = "0" + binary;
}
 

📌 전체 코드

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];

        for (int i = 0; i < n; i++) {
            String binary = Integer.toBinaryString(arr1[i] | arr2[i]);

            while (binary.length() < n) {
                binary = "0" + binary;
            }

            answer[i] = binary.replace("1", "#")
                              .replace("0", " ");
        }

        return answer;
    }
}

📄 정리

이 문제는 비트 OR 연산을 이해하면 간단하게 풀 수 있다.

두 지도를 직접 문자 단위로 비교하지 않고, 숫자 상태에서 OR 연산을 먼저 수행하면 벽이 있는 위치를 한 번에 구할 수 있다.

이후 이진수 문자열로 변환하고, 1은 #, 0은 공백으로 치환하면 최종 비밀지도를 만들 수 있다.

728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 시험장 나누기 JAVA 풀이 (이분 탐색, DFS, 트리)  (0) 2026.06.10
프로그래머스 문자열 나누기 JAVA 풀이 (문자열, 구현)  (0) 2026.06.09
프로그래머스 모의고사 JAVA 풀이 (완전탐색)  (0) 2026.06.06
프로그래머스 명예의 전당 (1) JAVA 풀이 (우선순위 큐, PriorityQueue)  (0) 2026.06.05
프로그래머스 콜라 JAVA 풀이 (구현, 시뮬레이션)  (0) 2026.06.04
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 시험장 나누기 JAVA 풀이 (이분 탐색, DFS, 트리)
  • 프로그래머스 문자열 나누기 JAVA 풀이 (문자열, 구현)
  • 프로그래머스 모의고사 JAVA 풀이 (완전탐색)
  • 프로그래머스 명예의 전당 (1) JAVA 풀이 (우선순위 큐, PriorityQueue)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    백준
    Level2
    자바
    정처기
    실기
    문자열
    level1
    코딩테스트
    정처기오답노트
    정보처리기사
    springboot
    자료구조
    수학
    백엔드개발자
    구현
    정보처리기사 실기 기출문제
    배열
    기출문제
    시뮬레이션
    피보나치
    정처기실기
    solved.ac
    완전탐색
    알고리즘
    프로그래머스
    dp
    정렬
    java
    브루트포스
    level0
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 비밀지도 JAVA 풀이 (비트연산, 문자열 변환)
상단으로

티스토리툴바