https://programmers.co.kr/learn/courses/30/lessons/84512?language=swift 

 

코딩테스트 연습 - 5주차

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니

programmers.co.kr

 

오랜만에 풀어본 프로그래머스 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
}
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom