티스토리 뷰
프로그래머스 1단계 카카오 코테 문제, 비밀지도 링크 ▼
오늘 풀어볼 문제는 카카오의 옛날 기출문제인 비밀지도 문제입니다. 최근에 알고리즘 문제를 많이 풀지 않아서, 주말을 틈타 하나 쉬운거 스위프트로 풀어보았네요. 문제 설명에 대해서는 위 링크를 통해 숙지하고 포스팅 봐주시기 바래요.
비밀지도 카카오 코딩테스트 기출 문제설명
문제의 목적은 단순합니다. 위와 같이 보물지도를 표현하는데 주어지는 1, 2 십진수 배열을 합한 결과를 보물지도 문자열 배열로 출력해주면 되는 문제입니다. 이 문제는 | (or)연산을 통해서 비트연산을 수행하면 비교적 간단하게 풀 수 있는 문제입니다.
바로 swift언어를 통해 문제 풀어보도록 하겠습니다.
비밀지도 카카오 코딩테스트 기출 swift 문제 풀이
1행) 먼저 배열의 크기, arr1, arr2의 합해야할 보물지도 배열(십진수 표현된 [Int]타입 배열)을 인자로 받고 있습니다.
2행) sumList는 두개의 이진수배열의 or 비트연산한 결과를 저장할 배열입니다.
3 ~ 5행) arr1의 (인덱스, 값)을 순회하면서 (enumerated + forEach) arr1, arr2 각각의 동일 인덱스에 대응되는 십진수 값들로 비트연산을 수행합니다. 두개의 보물지도를 합해야하는 것은 곧, | (or)연산을 의미합니다. 둘 중 하나만 1("#")이면 true("#")가 되는 겁니다. 이는 두개의 보물지도를 합치는 것과 동일한 결과를 보여줍니다. 4행에서 '|' 연산을 수행해서 sumLists에 넣고 있습니다.
앞서 sumList를 통해서 arr1, arr2지도를 합한 보물지도의 정보를 Int 배열 [Int]로 받았죠? 십진수 값이 들어있는 배열을 그대로 보물지도로 변환해서 반환하면 될 것입니다. 위 코드가 이를 구현하고 있습니다.
10행) length 변수를 통해 while문의 연산횟수를 구하는 이유는 swift 의 String타입에서 제공하는 count의 시간복잡도가 n이기 때문에 사용해봤습니다.
11 ~ 16행) sumList의 각 값을 돌면서 십진수 값에 대응되는 이진수 값을 보고, 이진수의 1이 있는 곳은 "#", 1이 아닌 곳은 " "로 대응해서 보물지도를 그리고, answer에 추가해주고 있습니다. 이렇게 결과적으로 arr1, arr2를 합한 보물지도를 반환할 수 있게됩니다. while문에서 변환된 보물지도 문자열의 길이가 n이 되지 않는 경우에는 그만한 길이를 앞에 추가시켜주어 answer에 추가해줍니다. (모든 보물지도 문자열은 길이가 n이어야 하는데, while 연산이 n회가 되지 않는 경우가 있기 때문)
본 코드의 제출 결과및 전체코드는 아래와 같습니다. 더 좋은 방법과 아이디어가 많을거라 생각합니다. 언제든 의견과 질문 환영합니다. 😁
func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
var sumList: [Int] = []
arr1.enumerated().forEach { (index, value) in
sumList.append(value | arr2[index])
}
return sumList.reduce(into: []) { (answer, element) in
var value = element
var result = ""
var length = 0
while value > 0 {
result = "\(value % 2 == 0 ? " " : "#")\(result)"
value /= 2
length += 1
}
answer.append(String(repeating: " ", count: n - length) + result)
}
}
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
프로그래머스 3단계 BFS 문제, 순위 swift 알고리즘 풀이 (0) | 2021.07.08 |
---|---|
swift zip, reduce 함수예제, 프로그래머스 음양더하기 문제풀이 (0) | 2021.04.28 |
프로그래머스 문자열 문제, 큰 수 만들기 스위프트 풀이 (0) | 2021.03.06 |
프로그래머스 구현문제, Lv2 스킬트리 swift 풀이 (0) | 2021.03.04 |
LeetCode swift 스택예제 Validate Stack Sequences 풀이 (0) | 2021.03.02 |
- Total
- Today
- Yesterday
- Swift 알고리즘
- swift
- Collection
- 김프매매
- swift문제
- 스위프트
- uikit
- swift알고리즘
- publisher
- swift 기초
- swift string
- createML
- 프로그래머스
- Protocol
- CoreML
- swift 문자열
- swift언어
- 부스트코스
- 백준알고리즘
- 프로그래머스swift
- 컬렉션
- 개발자문서
- 프로토콜
- 자연어처리
- 알고리즘문제
- SwiftUI
- swift reduce
- ios
- 알고리즘
- 백준swift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |