-
[programmers/Swift] [1차]다트게임 (2018 Kakao Blind Recruitment)Archive/Questions 2022. 5. 10. 22:24728x90
programmers.co.kr - 코딩테스트연습 - Lv.1 - 2018 KAKAO BLIND RECRUITMENT - 다트게임
Constraints :
"점수|보너스|[옵션]"으로 이루어진 문자열 3세트.
예) 1S2D*3T- 점수는 0에서 10 사이의 정수이다.
- 보너스는 S, D, T 중 하나이다.
- 옵선은 *이나 # 중 하나이며, 없을 수도 있다.
// // Created by Yongwoo Marco on 2022/05/06. // Copyright © 2022 Yongwoo Marco Kim. All rights reserved. // func solution(_ dartResult:String) -> Int { let numbers = dartResult.split(whereSeparator: { $0.isLetter||$0=="*"||$0=="#" }) let letters = dartResult.split(whereSeparator: { $0.isNumber }) var result = numbers.compactMap { Int($0) } for (index, letter) in letters.enumerated() { for char in letter { switch char { case "D": result[index] *= result[index] case "T": result[index] *= result[index] * result[index] case "#": result[index] *= -1 case "*": if index > 0 { result[index - 1] *= 2 } result[index] *= 2 default: break } } } return result.reduce(0, +) } print(solution("1S2D*3T")) // 37 print(solution("1D2S#10S")) // 9 print(solution("1D2S0T")) // 3 print(solution("1S*2T*3S")) // 23 print(solution("1D#2S*3S")) // 5 print(solution("1T2D3D#")) // -4 print(solution("1D2S3T*")) // 59
How I tried this :
가장 고민했던 점은 10 이었다. 한문자씩 쪼개진다고 생각했지만where 파라미터의 유용함을 새삼 깨달았다.
주어지는 dartResult 문자열은 문제가 없기 때문에
숫자를 제외한 문자열
문자를 제외한 문자열은 반드시 각각 3묶음이 나오므로
같은 인덱스에 접근해서 가산점 처리를 했다.
What I got is :
.split(maxSplits:omittingEmptySubsequences:whereSeparator:)메서드의 파라미터를 이용했다.
문제에 관한 모든 저작권 : https://programmers.co.kr/
728x90'Archive > Questions' 카테고리의 다른 글
[programmers/Swift] 신규 아이디 추천 (2021 Kakao Blind Recruitment) (0) 2022.05.11 [programmers/Swift] 실패율 (2019 Kakao Blind Recruitment) (0) 2022.05.11 [programmers/Swift] 부족한 금액 계산하기 (0) 2022.05.10 [programmers/Swift] 타겟 넘버 (0) 2022.05.10 [programmers/Swift] 최소직사각형 (0) 2022.05.10