[프로그래머스, Java] 비밀지도

2025. 7. 15. 21:16·CodingTest/Programmers

사진을 클릭하면 해당 문제로 이동

💡풀이

import java.util.Arrays;

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        // 두 배열을 각각 2진수 문자열로 변환
        String[] secret1 = toSecret(arr1, n);
        String[] secret2 = toSecret(arr2, n);

        String[] answer = new String[n];
        StringBuilder sb = new StringBuilder();

        // 각 행마다 처리
        for (int i = 0; i < n; i++) {
            // 각 열마다 OR 연산 수행
            for (int j = 0; j < n; j++) {
                // 둘 중 하나라도 1이면 벽('#'), 둘 다 0이면 공백(' ')
                if (secret1[i].charAt(j) == '1' || secret2[i].charAt(j) == '1') {
                    sb.append("#");
                } else {
                    sb.append(" ");
                }
            }
            answer[i] = sb.toString();
            sb.setLength(0);  // StringBuilder 초기화
        }
        return answer;
    }

    String[] toSecret(int[] arr, int n) {
        String s = "%" + n + "s";
        return Arrays.stream(arr)
                .mapToObj(str -> String.format(s, Integer.toString(str, 2)))  // 10진수 → 2진수 문자열
                .map(str -> str.replaceAll(" ", "0"))
                .toArray(String[]::new);
    }
}

💡풀이 2

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

        for(int i=0; i<n; i++){
            answer[i] = String.format(s, Integer.toString(arr1[i] | arr2[i], 2))
                    .replace("0", " ").replaceAll("1", "#");
        }

        return answer;
    }
}

 


📖새로 배운 부분

핵심 로직 정리

1. 비트 OR 연산으로 한 번에 처리

arr1[i] | arr2[i]
  • 두 정수를 비트 단위로 OR 연산
  • 두 맵을 비교하지 않고 한 번에 결합

2. 공백 패딩

String s = "%" + n + "s";  // "%5s" 형태
String.format(s, Integer.toString(arr1[i] | arr2[i], 2))
  • 2진수 문자열을 n자리로 만들되 부족한 부분은 앞에 공백 추가
  • 0 패딩 대신 공백 패딩 사용

3. 문자 치환

.replace("0", " ").replaceAll("1", "#")
  • 0 → 공백, 1 → #으로 변환
  • 패딩으로 생긴 공백 + 0에서 변환된 공백 = 올바른 공백 문자

 

 

...

나 문제를 너무 어렵게 푸나 🥲

세상은 넓고 천재는 많다


 

 

GitHub - okjunghyeon/Programmers_CodingTest: 프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다.

프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다. Contribute to okjunghyeon/Programmers_CodingTest development by creating an account on GitHub.

github.com

'CodingTest > Programmers' 카테고리의 다른 글

[프로그래머스, Java] 기사단원의 무기  (0) 2025.07.16
[프로그래머스, Java] 추억 점수  (0) 2025.07.16
[프로그래머스, Java] 카드 뭉치  (0) 2025.07.15
[프로그래머스, Java] 명예의 전당 (1)  (0) 2025.07.15
[프로그래머스, Java] 문자열 내 마음대로 정렬하기  (0) 2025.07.15
'CodingTest/Programmers' 카테고리의 다른 글
  • [프로그래머스, Java] 기사단원의 무기
  • [프로그래머스, Java] 추억 점수
  • [프로그래머스, Java] 카드 뭉치
  • [프로그래머스, Java] 명예의 전당 (1)
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (112) N
      • Backend (15)
        • SpringBoot (0)
        • Java (15)
      • Cs (18) N
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (79)
        • Programmers (79)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    StringTokenizer
    BufferedWriter
    json
    CS
    effectivejava
    programmers
    java
    codingtest
    switch
    BufferedReader
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[프로그래머스, Java] 비밀지도
상단으로

티스토리툴바