Algorithm/Programmers

[4μ£Όμ°¨] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 비밀지도

do-oni 2021. 8. 15. 15:40

 

비밀지도 λ¬Έμ œν’€μ΄

πŸ’»Q

λ„€μ˜€λŠ” ν‰μ†Œ ν”„λ‘œλ„κ°€ λΉ„μƒκΈˆμ„ μˆ¨κ²¨λ†“λŠ” μž₯μ†Œλ₯Ό μ•Œλ €μ€„ 비밀지도λ₯Ό 손에 λ„£μ—ˆλ‹€.
그런데 이 λΉ„λ°€μ§€λ„λŠ” 숫자둜 μ•”ν˜Έν™”λ˜μ–΄ μžˆμ–΄ μœ„μΉ˜λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•”ν˜Έλ₯Ό 해독해야 ν•œλ‹€.
λ‹€ν–‰νžˆ 지도 μ•”ν˜Έλ₯Ό 해독할 방법을 적어놓은 λ©”λͺ¨λ„ ν•¨κ»˜ λ°œκ²¬ν–ˆλ‹€.

• μ§€λ„λŠ” ν•œ λ³€μ˜ 길이가 n인 μ •μ‚¬κ°ν˜• λ°°μ—΄ ν˜•νƒœλ‘œ, 각 칸은 "곡백"(" ") λ˜λŠ” "λ²½"("#") 두 μ’…λ₯˜λ‘œ 이루어져 μžˆλ‹€.
• μ „체 μ§€λ„λŠ” 두 μž₯의 지도λ₯Ό κ²Ήμ³μ„œ 얻을 수 μžˆλ‹€.
   κ°κ° "지도 1"κ³Ό "지도 2"라고 ν•˜μž. 지도 1 λ˜λŠ” 지도 2 쀑 μ–΄λŠ ν•˜λ‚˜λΌλ„ 벽인 뢀뢄은 전체 μ§€λ„μ—μ„œλ„ 벽이닀.
   μ§€λ„ 1κ³Ό 지도 2μ—μ„œ λͺ¨λ‘ 곡백인 뢀뢄은 전체 μ§€λ„μ—μ„œλ„ 곡백이닀.
• "지도 1"κ³Ό "지도 2"λŠ” 각각 μ •μˆ˜ λ°°μ—΄λ‘œ μ•”ν˜Έν™”λ˜μ–΄ μžˆλ‹€.
• μ•”ν˜Έν™”λœ 배열은 μ§€λ„μ˜ 각 κ°€λ‘œμ€„μ—μ„œ λ²½ 뢀뢄을 1, 곡백 뢀뢄을 0으둜 λΆ€ν˜Έν™”ν–ˆμ„ λ•Œ μ–»μ–΄μ§€λŠ” μ΄μ§„μˆ˜μ— ν•΄λ‹Ήν•˜λŠ” κ°’μ˜ 배열이닀.

λ„€μ˜€κ°€ ν”„λ‘œλ„μ˜ λΉ„μƒκΈˆμ„ 손에 넣을 수 μžˆλ„λ‘, λΉ„λ°€μ§€λ„μ˜ μ•”ν˜Έλ₯Ό ν•΄λ…ν•˜λŠ” μž‘μ—…μ„ 도와쀄 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λΌ.

μž…λ ₯
• μž…λ ₯으둜 μ§€λ„μ˜ ν•œ λ³€ 크기 n κ³Ό 2개의 μ •μˆ˜ λ°°μ—΄ arr1, arr2κ°€ λ“€μ–΄μ˜¨λ‹€.
• 1 ≦ n β‰¦ 16arr1, arr2λŠ” 길이 n인 μ •μˆ˜ λ°°μ—΄λ‘œ μ£Όμ–΄μ§„λ‹€.
• μ •μˆ˜ λ°°μ—΄μ˜ 각 μ›μ†Œ xλ₯Ό μ΄μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œμ˜ κΈΈμ΄λŠ” n μ΄ν•˜μ΄λ‹€. 즉, 0 ≦ x β‰¦ 2n - 1을 λ§Œμ‘±ν•œλ‹€.
좜λ ₯
• μ›λž˜μ˜ 비밀지도λ₯Ό ν•΄λ…ν•˜μ—¬ '#' , 곡백으둜 κ΅¬μ„±λœ λ¬Έμžμ—΄ λ°°μ—΄λ‘œ 좜λ ₯ν•˜λΌ.

 

πŸ’‘A

toBinaryString λ©”μ†Œλ“œλ‘œ μ •λ‹΅ 배열에 νŒŒλΌλ―Έν„°λ‘œ λ“€μ–΄μ˜¨ 비밀지도 λ°°μ—΄ μ •μˆ˜λ₯Ό μ΄μ§„μˆ˜λ‘œ λ°”κΎΈμ–΄μ€€λ‹€.
지도 1,2 쀑 ν•˜λ‚˜λΌλ„ λ²½μ΄κ±°λ‚˜ 곡백이면 전체 지도에 적용이 되기 λ•Œλ¬Έμ— 논리 μ—°μ‚° OR을 μ‚¬μš©ν•œλ‹€.
μ—¬κΈ°κΉŒμ§€ μƒκ°ν•˜κ³  ν’€μ—ˆλŠ”λ° ν…ŒμŠ€νŠΈ 1만 ν†΅κ³Όλ˜μ—ˆλ‹€.
class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        
        String[] answer = new String[n];
        
        for(int i = 0; i < n; i++) { 
            answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
            answer[i] = answer[i].replaceAll("[1]", "#");
            answer[i] = answer[i].replaceAll("[0]", " ");
        }
        
        return answer;
    }
}

λ‹€μ‹œ λ‹€λ₯Έ 풀이λ₯Ό μ°Έκ³ ν•΄ λ³΄λ‹ˆ λ†“μΉœ 뢀뢄이 λ°°μ—΄ 길이 섀정을 n개둜 ν•΄μ£ΌλŠ” λΆ€λΆ„μ—μ„œ String.format으둜 μ„€μ •ν•΄ 쀄 수 μžˆλ‹€λŠ” κ±Έ μ•Œκ²Œ λ˜μ—ˆλ‹€.
class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        
        String[] answer = new String[n];
        
        for(int i = 0; i < n; i++) { 
            answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
            answer[i] = String.format("%"+n+"s", answer[i]);
            answer[i] = answer[i].replaceAll("[1]", "#");
            answer[i] = answer[i].replaceAll("[0]", " ");
        }
        
        return answer;
    }
}​