본문 바로가기
Problem Solving

[Swift] 프로그래머스 비밀지도(lv. 1)

by DuncanKim 2023. 1. 17.
728x90

[Swift] 프로그래머스 비밀지도(lv. 1)

 

1. 문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

2. 접근

이 문제는 이해는 됐는데, 어떤 식으로 연산해야 할 지 생각하는데 오래걸렸다.

뭔 연산을 하면 있는곳 없는곳 나오는 그게 있으니까 문제를 냈을 껀데, 이게 그 비트연산인가 하는 개념어만 생각나고 어떻게 풀 지 감이 안왔다. 그래서 비트 연산을 구글 선생님을 통해 개념 정리를 하고, 그제야 쉽게 풀 수 있었다.

 

아래 코드 5번 라인에서 or 연산이 바로 그 해결의 키라고 할 수 있다.

비트연산은 and, or, nor ... 등이 있는데, 두 수를 비교할 때 and는 && 처럼 둘 다 1이어야 1이고, 나머지는 0이며, or은 둘 중 하나만 1이어도 1을 반환하고 둘 다 0이면 0을 반환한다.

 

이를 활용하여 새로운 수를 리턴받고, 만약 1이 있으면 #을, 없으면 공백을 더하여 새로운 답변 배열을 만들어 출력을 해주었다.

 

비트연산이라는 기본적인 컴퓨터 공학 지식이 있으면 바로 쉽게 풀 수 있는 문제였던 것이다.

 

열심히 CS 공부를 꾸준히 해야겠다는 생각을 한 문제였다.

 

 

3. 코드

func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
    var calculateInt: [Int] = []
    
    for i in 0 ... n - 1 {
        calculateInt.append(arr1[i] | arr2[i])
    }
    var answer: [String] = calculateInt.map({ String($0, radix: 2) })
    
    for i in 0 ... answer.count - 1 {
        var temp = [Character]()
        var tempCount = answer[i].count
        while tempCount != n {
            temp.append(" ")
            tempCount += 1
        }
        for j in answer[i] {
            temp.append(j == "1" ? "#" : " ")
        }
        answer[i] = String(temp)
    }
    return answer
}
728x90

댓글