코딩테스트

[Swift 알고리즘] 프로그래머스(Lv.1) - [1차] 비밀지도

유정주 2022. 2. 27. 21:22
반응형

안녕하세요. 개발 중인 정주입니다.

 

오늘은 프로그래머스(Lv.1) - [1차] 비밀지도 문제를 풀었습니다.

 


목차


    Github

     

    GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘

    스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.

    github.com

     

    문제 링크

    https://programmers.co.kr/learn/courses/30/lessons/17681

     

    코딩테스트 연습 - [1차] 비밀지도

    비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

    programmers.co.kr

     


    풀이

    해당 문제는 정말 코테처럼 프로그래머스 안에서 해결했습니다.

     

    처음에는 arr1과 arr2의 binary를 각각 구해서 마지막에 비교 작업을 거쳤는데요.

    그 이유는 0과 1이 true, false를 나타내지 않았기 때문입니다.

    통과는 했지만 비교적 코드가 길었습니다.

     

    비교 대상이 0과 1이기 때문에 비트 연산자 |를 사용하면 될 것 같아서 다시 짜보기로 했습니다.

    결국에는 한 번의 반복문만으로 코드를 짤 수 있었네요.

     

    이 문제에서 배운 의외였던 점은 2진수의 길이를 지정할 수 없다는 점이었습니다.

    String format으로도 마땅한 방법이 안 나와서 String(repeating:, count:)를 이용해 앞에 0을 강제로 붙여줬습니다.

     


    전체 코드

    func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
        var answer: [String] = []
        
        for i in (0..<n) {
            var binary = String(arr1[i] | arr2[i], radix: 2)
            binary = String(repeating: "0", count: n - binary.count) + binary
            
            answer.append(String(binary.map { $0 == "1" ? "#" : " " }))
        }
        
        return answer
    }

    아직은 초보 개발자입니다.

    더 효율적인 코드 훈수 환영합니다!

    공감 댓글 부탁드립니다.

     

     

    반응형