ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2018 KAKAO BLIND RECRUITMENT] [1μ°¨] 비밀지도 - Level1
    곡뢀/μ•Œκ³ λ¦¬μ¦˜ 2022. 12. 5. 16:20
    728x90

    πŸ“λ¬Έμ œ μ„€λͺ… 

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

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

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

    μž…λ ₯ ν˜•μ‹

    μž…λ ₯으둜 μ§€λ„μ˜ ν•œ λ³€ 크기 n κ³Ό 2개의 μ •μˆ˜ λ°°μ—΄ arr1, arr2κ°€ λ“€μ–΄μ˜¨λ‹€.

    • 1 ≦ n β‰¦ 16
    • arr1, arr2λŠ” 길이 n인 μ •μˆ˜ λ°°μ—΄λ‘œ μ£Όμ–΄μ§„λ‹€.
    • μ •μˆ˜ λ°°μ—΄μ˜ 각 μ›μ†Œ xλ₯Ό μ΄μ§„μˆ˜λ‘œ λ³€ν™˜ν–ˆμ„ λ•Œμ˜ κΈΈμ΄λŠ” n μ΄ν•˜μ΄λ‹€. 즉, 0 ≦ x β‰¦ 2n - 1을 λ§Œμ‘±ν•œλ‹€.

    좜λ ₯ ν˜•μ‹

    μ›λž˜μ˜ 비밀지도λ₯Ό ν•΄λ…ν•˜μ—¬ '#', κ³΅λ°±μœΌλ‘œ κ΅¬μ„±λœ λ¬Έμžμ—΄ λ°°μ—΄λ‘œ 좜λ ₯ν•˜λΌ.

    μž…μΆœλ ₯ 예제

    λ§€κ°œλ³€μˆ˜κ°’

    n 5
    arr1 [9, 20, 28, 18, 11]
    arr2 [30, 1, 21, 17, 28]
    좜λ ₯ ["#####","# # #", "### #", "# ##", "#####"]

     

    λ§€κ°œλ³€μˆ˜κ°’

    n 6
    arr1 [46, 33, 33 ,22, 31, 50]
    arr2 [27 ,56, 19, 14, 14, 10]
    좜λ ₯ ["######", "### #", "## ##", " #### ", " #####", "### # "]

     

     πŸ”Ž 처음 μƒκ°ν•œ 아이디어  

     

    ν•˜λ‚˜μ”© 지도λ₯Ό λ§Œλ“œλŠ” 방법뢀터 제일 λ¨Όμ € λ– μ˜¬λžμ§€λ§Œ

    1. arr1, arr2 10μ§„μˆ˜λ“€ 2μ§„μˆ˜λ‘œ λ³€ν™˜ν•΄μ„œ 지도 λ§Œλ“€κΈ° (1이 λ²½)

    2. arr1, arr2 κ²ΉμΉ˜λŠ” 뢀뢄을 μ œκ±°ν•˜κΈ°λ§Œ ν•˜λ©΄..?!

     

    λ˜κ² μ§€λ§Œ ν•œ λ²ˆμ— μ²˜λ¦¬ν•˜λŠ” 방법을 μƒκ°ν•œλ‹€.

    2μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜κ³  or λΉ„νŠΈ 연산을 ν•΄μ£Όλ©΄ μ›ν•˜λŠ” κ²°κ³Όκ°€ λ‚˜μ˜€λ‹ˆ 그것을 answer 배열에 μ €μž₯ν•œλ‹€.

    String str = String.format("%"+n+"s", Integer.parseInt(Integer.toBinaryString(arr1[i]|arr2[i]))).replace(" ", "0");

    μœ„ μ½”λ“œλ‘œ 자릿수λ₯Ό n만큼 κ³ μ •ν•˜κ³  λΉ„νŠΈμ—°μ‚° | (or) ν•΄μ„œ str에 μ €μž₯ν•  수 μžˆλ‹€.

    replaceλ₯Ό μ΄μš©ν•΄ 1은 "#"으둜 0은 " " 곡백으둜 λ°”κΏ”μ£Όλ©΄ 끝! 

     

    이라고 μƒκ°ν–ˆλŠ”λ° ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 2,6μ—μ„œ λŸ°νƒ€μž„ μ—λŸ¬κ°€ λ–΄λ‹€.

    질문 λͺ©λ‘μ„ μ°Ύμ•„λ³΄λ‹ˆ 

    ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 2, 6λ²ˆμ€ λŒ€μž…ν•˜λŠ” 값이 큰 κ±° κ°™μŠ΅λ‹ˆλ‹€. Integerν˜•μœΌλ‘œ ν‘œν˜„ν•  수 μžˆλŠ” μ΅œλŒ€ 값을 μ΄ˆκ³Όν•΄μ„œ λŸ°νƒ€μž„ μ—λŸ¬κ°€ λ°œμƒν•˜λŠ” 것 같은데 μ €λŠ” Longν˜•μœΌλ‘œ λ°”κΏ¨λ”λ‹ˆ ν•΄κ²°λμŠ΅λ‹ˆλ‹€.

    이런 닡변이 μžˆμ–΄ Integer -> Long으둜 λ°”κΏ¨λ”λ‹ˆ 톡과할 수 μžˆμ—ˆλ‹€.

     

     

     

     βœοΈ μž‘μ„±ν•œ μ½”λ“œ 

    class Solution {
        
        public String[] solution(int n, int[] arr1, int[] arr2) {
           
           String[] answer = new String[n];
    	        
    	        for(int i=0;i<n;i++) {
    	        	
                    String s = String.format("%"+n+"s", Long.parseLong(Long.toBinaryString(arr1[i]|arr2[i]))).replace("1", "#").replace("0", " ");
    	        	
    	        	answer[i] = s;
    	        	
    	        }
    	        
    	        return answer;
        }
    }

     

     πŸ– μ•Œκ²Œ 된 점 

    (1) String.format("%4s", str);

    자릿수 κ³ μ •ν•΄μ„œ intν˜•μ„ λ°”μ΄λ„ˆλ¦¬ 슀트링으둜 λ°”κΎΈλŠ” 방법을 μ•Œκ²Œ λ˜μ—ˆλ‹€. 

    맨 μ•žμ˜ 0은 곡백으둜 처리되기 λ•Œλ¬Έμ— μ™„μ „ν•˜κ²Œ λ°”κΎΈλ €λ©΄ replace(" ", "0"); 처리λ₯Ό ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

     

     

    μ œν•œμ‘°κ±΄μ„ ν™•μΈν•˜λŠ” μŠ΅κ΄€μ„ λ“€μ΄μž.

     

     

     

     

    λŒ“κΈ€

Designed by Tistory.