https://programmers.co.kr/learn/courses/30/lessons/84512?language=swift
오랜만에 풀어본 프로그래머스 2단계 문제.
첫 구조 설계를 이상하게 해서 돌아돌아 통과했다.
사실 로직만 이해한다면 구현에는 큰 어려움이 없는 문제였다.
내 로직을 설명하자면 이렇다.
먼저 시작은 var answerString = "A"로 시작한다.
그리고 while(answerString != word) 인 동안 특정 로직을 반복하는데, 그 로직은 다음과 같다:
// if 요소의 길이가 5개 안 되면
// 마지막 요소에 "A" 추가.
// else(5개인 경우)
// if Last가 U인 경우
// while(마지막 요소가 U인 동안)
// 마지막 요소 제거.("AUUU"인 경우 생각해보기.)
// 현재의 마지막 요소 1 증가.
// else (Last가 U가 아닌 경우)
// 현재의 마지막 요소 1 증가.
위와 같은 로직에 따라 입력한 내 정답 코드:
import Foundation
func upgrade(_ c: Character) -> String {
if "\(c)" == "A" {
return "E"
} else if ("\(c)" == "E") {
return "I"
} else if ("\(c)" == "I") {
return "O"
} else if ("\(c)" == "O") {
return "U"
} else {
return "wrong case"
}
}
func solution(_ word:String) -> Int {
var answer: Int = 1
var answerString = "A"
// 시작: "A"
while (answerString != word) {
answer += 1
// 5개 안 되면
// 마지막 요소에 "A" 추가.
if (answerString.count != 5) {
answerString += "A"
} else {
// else(5개인 경우)
// Last가 U인 경우
// while(마지막 요소가 U인 동안)
// 마지막 요소 제거.("AUUU"인 경우 생각해보기.)
// 현재의 마지막 요소 1 증가.
if (answerString.last! == "U") {
while (answerString.last! == "U") {
answerString.removeLast()
}
var temp = answerString.last!
answerString.removeLast()
answerString += upgrade(temp)
} else {
// else (Last가 U가 아닌 경우)
// 현재의 마지막 요소 1증가
var temp = answerString.last!
answerString.removeLast()
answerString += upgrade(temp)
}
}
}
return answer
}
'Algorithm' 카테고리의 다른 글
프로그래머스 - 프린터 Swift (0) | 2021.09.07 |
---|---|
프로그래머스 - 수식 최대화 [Swift] (0) | 2021.09.06 |
프로그래머스 크레인 인형뽑기 게임 [Swift] (0) | 2021.09.03 |
프로그래머스 - 정수 제곱근 판별 [Swift] (0) | 2021.07.05 |
프로그래머스 [Swift] 제일 작은 수 제거하기 (0) | 2021.07.05 |
최근댓글