728x90
[Swift] 프로그래머스 비밀지도(lv. 1)
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/17681
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
'Problem Solving' 카테고리의 다른 글
[Swift] 프로그래머스 문자열 내 마음대로 정렬하기(lv. 1) (0) | 2023.01.19 |
---|---|
[Swift] 프로그래머스 삼총사(lv. 1) (0) | 2023.01.18 |
[Swift] 프로그래머스 최소직사각형(lv. 1) (0) | 2023.01.16 |
[Swift] 프로그래머스 시저 암호(lv. 1) (0) | 2023.01.13 |
[Swift] 프로그래머스 옹알이(1) (lv.0) (0) | 2023.01.12 |
댓글