λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“– Problem Solution/Programmers

2018 KAKAO BLIND RECUITMENT 1μ°¨ 비밀지도 Swift

by Fomagran πŸ’» 2020. 3. 4.
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]
좜λ ₯ ["######", "### #", "## ##", " #### ", " #####", "### # "]

풀이:μš°μ„  arr1κ³Ό arr2의 0~λκΉŒμ§€ 2μ§„μˆ˜λ‘œ 각 각 λ°”κΎΌ 값을 Intν˜•μœΌλ‘œ λ³€ν™˜ν•΄ a,b에 λ‹΄λŠ”λ‹€.

κ·Έ λ‹€μŒ λ°”κΎΌ 값을 λ”ν•΄μ„œ String으둜 λ³€ν™˜ν•΄ c에 λ„£μ–΄μ€€λ‹€. 

κ·Έ λ‹€μŒ c에 μžˆλŠ” 것듀 쀑 1,2λ©΄ #으둜 0이면 곡백으둜 ν•΄μ„œ str에 μ°¨λ‘€λ‘œ 더해쀀닀. μ΄μ§„μˆ˜μ΄κΈ° λ•Œλ¬Έμ— 0μ•„λ‹ˆλ©΄ 1μ΄λ‹ˆκΉ 1,2λ˜λŠ” 0으둜 값이 λ‚˜μ˜¨λ‹€.(λ”ν•œκ°’)

그런 λ’€ n보닀 str길이 짧닀면 μ–Όλ§ŒνΌ 짧은지 μž¬μ„œ μ•žμ— 곡백을 λ„£μ–΄μ€€λ‹€.

그리고 answer에 μ°¨λ‘€λ‘œ λ„£μ–΄μ€€ λ’€ str은 λ‹€μ‹œ ""으둜 λ§Œλ“€μ–΄μ£ΌλŠ” 것을 λ°˜λ³΅ν•œλ‹€

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
     var answer: [String= []
    var str = String()
    for i in 0..<arr1.count{
        let a = Int(String(arr1[i],radix: 2))!
        let b = Int(String(arr2[i],radix: 2))!
        let c = String(a+b)
        for i in c{
            if i == "1" || i == "2" {
                str += "#"
            }else{
                str += " "
            }
        }
        if str.count < n {
            for _ in 0...n-str.count-1{
                str = " \(str)"
                print(str)
            }
        }
        answer.append(str)
        str = ""
        }
    return answer
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

mapκ³Ό filter reduceλ₯Ό μ΄μš©ν–ˆμœΌλ©΄ 더 짧게 ν–ˆμ„ μˆ˜λ„ μžˆμ§€λ§Œ κ·Έλƒ₯ forλ¬Έ ifλ¬Έ μ‚¬μš©ν•΄μ„œ ν•˜λŠ” 것도 λ‚˜μ˜μ§€ μ•Šμ€ λ“―

μ΅œλŒ€ν•œ 쀄이면 μ€„μ΄λŠ”λ° 걍 가독성을 μœ„ν•΄ ν’€μ–΄μ„œ 씀

 

λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이

λ”±νžˆ μ—†μŒ

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€