Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- parse
- 정보처리기사 실기
- 위클리챌린지
- 2018 KAKAO BLIND RECRUITMENT
- programmers
- SwiftGen
- JSON
- Pod
- JSONParser
- UITableView
- RealmSwift
- 프로그래머스
- PageViewController
- CustomCode
- cocoapods
- Xcode
- Codable
- issecuretextentry
- pbxgroup
- Decodable
- Custom PageViewController
- 티스토리챌린지
- JSONSerialization
- dynamic height
- pbxfilesystemsynchronizedrootgroup
- 정보처리기사
- storybaord
- IOS
- swift
- 정보처리기사 실기 요약본
Archives
- Today
- Total
iOS 개발일기
[Swift] 프로그래머스(코딩테스트 연습: LEVEL 1) - [1차] 비밀지도 본문
https://programmers.co.kr/learn/courses/30/lessons/17681
나의 풀이
func solution(_ n: Int, _ arr1: [Int], _ arr2: [Int]) -> [String] {
var answer: [String] = []
zip(arr1, arr2).forEach { item1, item2 in
guard let item1 = Int(String(item1, radix: 2)) else {return}
guard let item2 = Int(String(item2, radix: 2)) else {return}
let line = String(item1 + item2)
let result = line.map({$0 == "0" ? " " : "#"}).joined()
let space = String(repeating: " ", count: n - result.count)
answer.append(space + result)
}
return answer
}
저는 10진수로 된 두 수를 2진법으로 변환하고 두 수를 덧셈하였습니다.
이렇게 한다면 두 수의 각 위치마다 모두 0인 수 외에는 1이상의 수가 나오므로 문자열을 치환하기 편할 것 같아 이 방법을 사용하였습니다.
여기서 지도의 크기보다 적은 문자열의 수를 가진 경우에는 가장 앞자리의 수가 0이 나와 Int형으로 변형하였을 때 제거되기 때문에 문제에서 원하는 답을 도출할 수 없게됩니다.
ex) "001111"을 Int형으로 변환할 경우 "1111"으로 변환되죠.
이러한 경우를 고려하여 부족한 "0"의 수 즉, 공백의 수만큼 'String(repeating repeatedValue: Int, count: Int)'함수를 사용하여 공백을 출력하도록 하였습니다.
처음에는 꽤 괜찮게 작성한 함수라고 생각하고 제출했었는데
역시 다른 분들의 풀이를 보자마자 충격받았습니다... 아직 실력이 많이 부족한 것 같네요...
다른 분들의 풀이를 보고 영감을 얻어 조금 더 간결하게 수정해보았습니다.
저는 개인적으로 옵셔녈(!, ?)을 좋아하지 않기 때문에 guard let 또는 if let 을 사용하여 옵셔널 바인딩을 해주는 편입니다.
그런데 아래와 같은 방법으로 옵셔널 바인딩을 할 필요없이 작성할 수 있다는 것을 알게되었습니다.
보완한 풀이
func solution(_ n: Int, _ arr1: [Int], _ arr2: [Int]) -> [String] {
var answer: [String] = []
for i in 0..<n {
let line = String(arr1[i] | arr2[i], radix: 2)
let result = line.map({$0 == "0" ? " " : "#"}).joined()
let space = String(repeating: " ", count: n - result.count)
answer.append(space + result)
}
return answer
}
'코딩테스트' 카테고리의 다른 글
[Swift] 프로그래머스(코딩테스트 연습: LEVEL 1) - 숫자 문자열과 영단어 (0) | 2021.08.19 |
---|---|
[Swift] 프로그래머스(위클리 챌린지 2주차) - 상호 평가 (0) | 2021.08.18 |
[Swift] 프로그래머스(위클리 챌린지 1주차) -부족한 금액 계산하기 (0) | 2021.08.06 |
[Swift] 프로그래머스(코딩테스트 연습: LEVEL 1) - [1차] 다트 게임 (0) | 2021.08.05 |