반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 프로그래머스 - [1차] 다트 게임 문제를 풀었습니다.
목차
Github
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/17682
풀이
이번 문제는 꽤 어려웠습니다 ㅠㅠ
문자열 처리로 어떻게든 해보려고 했는데 안 돼서 스택 개념을 이용해서 풀었습니다.
해당 포스팅에서는 다른 사람의 split 사용법을 참고해서 수정한 버전을 설명하겠습니다.
스택으로 풀었을 때의 힘들었던 점은 10점이 존재했기 때문에 0 -> 1로 append 돼서 reverse 작업도 따로 해줘야 했고 두 자리 숫자 처리도 해줘야 했는데요.
split(whereSeparator:)를 이용해서 숫자를 기준으로 자르거나, 문자를 기준으로 자를 수 있었습니다.
쉽게 말해 스택을 이용한 부분을 통째로 삭제하고 두 줄로 처리할 수 있게 되었습니다.
문자를 기준으로 잘라서 숫자 배열을 만들었고, 숫자를 기준으로 잘라서 문자 배열을 만들었습니다.
문자 배열에서 하나씩 빼와서 한 글자 한 글자 따로 처리해서 score에 적절한 계산을 해줍니다.
코드가 길지 않으니 봐보시고 이해가 안 되는 점은 댓글로 남겨주세요.
전체 코드
func solution(_ dartResult:String) -> Int {
var scores = dartResult.split(whereSeparator: { !$0.isNumber }).compactMap { Int($0) }
let letters = dartResult.split(whereSeparator: { $0.isNumber })
for (index, letter) in letters.enumerated() {
letter.forEach {
let score = scores[index]
switch $0 {
case "D":
scores[index] = score * score
case "T":
scores[index] = score * score * score
case "*":
scores[index] = 2 * score
if index - 1 >= 0 {
scores[index - 1] = 2 * scores[index - 1]
}
case "#":
scores[index] = -score
default:
break
}
}
}
return scores.reduce(0, +)
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형