문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.


제한사항
  • 1 ≤ numbers의 길이 ≤ 9
    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.

내가 푼 풀이

1에서 9까지 더한수 : 45

45에서 주어진 배열의 총합을 뺀 수 출력

 

import Foundation

func solution(_ numbers:[Int]) -> Int {
    return 45 - numbers.reduce(0, +)
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

짝지어 제거하기 Swift  (0) 2023.04.11
최소직사각형 Swift  (0) 2023.04.10
나머지가 1이 되는 수 찾기 Swift  (0) 2023.04.10
신고 결과 받기 Swift  (0) 2023.04.10
성격 유형 검사하기 Swift  (0) 2023.04.10

문제 설명

자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.


제한사항
  • 3 ≤ n ≤ 1,000,000

내가 푼 풀이

n % i == 1인 i의 최솟값 출력

 

import Foundation

func solution(_ n:Int) -> Int {
    return Array(1...n).filter{ n % $0 == 1}.min()!
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

최소직사각형 Swift  (0) 2023.04.10
없는 숫자 더하기 Swift  (0) 2023.04.10
신고 결과 받기 Swift  (0) 2023.04.10
성격 유형 검사하기 Swift  (0) 2023.04.10
숫자 짝궁 Swift  (0) 2023.04.10
문제 설명

신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.

  • 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
    • 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
    • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
  • k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
    • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.

다음은 전체 유저 목록이 ["muzi", "frodo", "apeach", "neo"]이고, k = 2(즉, 2번 이상 신고당하면 이용 정지)인 경우의 예시입니다.


각 유저별로 신고당한 횟수는 다음과 같습니다.


위 예시에서는 2번 이상 신고당한 "frodo"와 "neo"의 게시판 이용이 정지됩니다. 이때, 각 유저별로 신고한 아이디와 정지된 아이디를 정리하면 다음과 같습니다.

따라서 "muzi"는 처리 결과 메일을 2회, "frodo"와 "apeach"는 각각 처리 결과 메일을 1회 받게 됩니다.

이용자의 ID가 담긴 문자열 배열 id_list, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 report, 정지 기준이 되는 신고 횟수 k가 매개변수로 주어질 때, 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return 하도록 solution 함수를 완성해주세요.


제한사항
  • 2 ≤ id_list의 길이 ≤ 1,000
    • 1 ≤ id_list의 원소 길이 ≤ 10
    • id_list의 원소는 이용자의 id를 나타내는 문자열이며 알파벳 소문자로만 이루어져 있습니다.
    • id_list에는 같은 아이디가 중복해서 들어있지 않습니다.
  • 1 ≤ report의 길이 ≤ 200,000
    • 3 ≤ report의 원소 길이 ≤ 21
    • report의 원소는 "이용자id 신고한id"형태의 문자열입니다.
    • 예를 들어 "muzi frodo"의 경우 "muzi"가 "frodo"를 신고했다는 의미입니다.
    • id는 알파벳 소문자로만 이루어져 있습니다.
    • 이용자id와 신고한id는 공백(스페이스)하나로 구분되어 있습니다.
    • 자기 자신을 신고하는 경우는 없습니다.
  • 1 ≤ k ≤ 200, k는 자연수입니다.
  • return 하는 배열은 id_list에 담긴 id 순서대로 각 유저가 받은 결과 메일 수를 담으면 됩니다.

내가 푼 풀이

규칙같은것은 사실 잘 안보이고 차곡차곡 입력하고 정리해서 출력하는 수 밖에 없다고 생각했다.

dict = [String: Int]   :  이용자의 신고받은 횟수저장

arr = Array(repeating: Array(repeating: "", count: 0), count: id_list.count)   : 신고한 이용자들 id_list의 인덱스와 동일하게 저장

idxDict = [String: Int]() : 이용자의 인덱스 저장 ( 위 arr와 아래 result의 인덱스 접근을 위해 선언)

result = Array(repeating: 0 , count: id_list.count) : 메일을 받을 횟수들이 저장된 배열 ( id_list의 인덱스순과 동일)

 

dict 에서 기준치 k 이상으로 신고받은 인원을 선별하고, 그 유저를 신고한 인원에게 메일량 +1

 

import Foundation

func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
    var dict = [String: Int]()			//이용자 신고받은 횟수 저장
    var arr = Array(repeating: Array(repeating: "", count: 0), count: id_list.count) // 신고한 이용자들을 저장
    var idxDict = [String: Int]()		//이용자의 배열 인덱스 저장( arr와 result 배열 인덱스 접근을 위해 선언)
    var result = Array(repeating: 0 , count: id_list.count) // 받을 메일횟수가 저장된 배열 ( id_list의 이용자 순과 동일)
    
    for i in 0..<id_list.count {	// 이용자의 배열 인덱스 저장
        idxDict[id_list[i]] = i
    }
    for i in report {		// 신고 접수
        var strArr = i.split(separator: " ").map{ String($0)}
        if arr[idxDict[strArr[1]]!].contains(strArr[0]) {	//동일인물이 신고했는지 검사
            continue
        } else {
            arr[idxDict[strArr[1]]!].append(strArr[0])
            if dict[strArr[1]] == nil {			// 누적 신고량 저장
                dict[strArr[1]] = 1
            } else {
                dict[strArr[1]]! += 1
            }
        }
    }
    for (key, value) in dict.filter{ $0.value >= k} {	// 기준치 보다 높게 신고받은 인원들 선별, 신고한 이용자의 메일 추가
        var idx = idxDict[key]!
        for i in arr[idx] {
            result[idxDict[String(i)]!] += 1
        }
    }
    
    return result
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

없는 숫자 더하기 Swift  (0) 2023.04.10
나머지가 1이 되는 수 찾기 Swift  (0) 2023.04.10
성격 유형 검사하기 Swift  (0) 2023.04.10
숫자 짝궁 Swift  (0) 2023.04.10
삼총사 Swift  (0) 2023.04.10

문제 설명

나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.

4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다.

검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.

  • 매우 비동의
  • 비동의
  • 약간 비동의
  • 모르겠음
  • 약간 동의
  • 동의
  • 매우 동의

각 질문은 1가지 지표로 성격 유형 점수를 판단합니다.

예를 들어, 어떤 한 질문에서 4번 지표로 아래 표처럼 점수를 매길 수 있습니다.


이때 검사자가 질문에서 약간 동의 선택지를 선택할 경우 어피치형(A) 성격 유형 1점을 받게 됩니다. 만약 검사자가 매우 비동의 선택지를 선택할 경우 네오형(N) 성격 유형 3점을 받게 됩니다.

위 예시처럼 네오형이 비동의, 어피치형이 동의인 경우만 주어지지 않고, 질문에 따라 네오형이 동의, 어피치형이 비동의인 경우도 주어질 수 있습니다.
하지만 각 선택지는 고정적인 크기의 점수를 가지고 있습니다.

  • 매우 동의나 매우 비동의 선택지를 선택하면 3점을 얻습니다.
  • 동의나 비동의 선택지를 선택하면 2점을 얻습니다.
  • 약간 동의나 약간 비동의 선택지를 선택하면 1점을 얻습니다.
  • 모르겠음 선택지를 선택하면 점수를 얻지 않습니다.

검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단합니다. 단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다.

질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어집니다. 이때, 검사자의 성격 유형 검사 결과를 지표 번호 순서대로 return 하도록 solution 함수를 완성해주세요.


내가 푼 풀이

각 성격유형들을 Dictionary에 저장하고, 주어진 choies를 순회하며 성격유형 점수를 올린다.

지표 순으로 점수가 높은 성격유형을 차례대로 출력한다.

 

import Foundation

func solution(_ survey:[String], _ choices:[Int]) -> String {
    var checkList = ["RT", "CF", "JM", "AN"]    //지표 순서로 저장된 배열
    var dict = ["R": 0, "T": 0, "C": 0, "F": 0, "J": 0, "M": 0, "A": 0, "N": 0] // 성격유형 점수들
    var points = [0, 3, 2, 1, 0, 1, 2, 3]   // 입력된 값에 따른 점수
    var resultStr = ""
    
    for i in 0..<survey.count {
        var arr = survey[i].map{String($0)}
        var str = ""
        var point = points[choices[i]]
        
        if choices[i] == 4 {    // 4 항목은 점수변동 없음 -> 스킵
            continue
        }
        if choices[i] > 4 {     // 항목 점수대로 검사
            str = arr[1]
        } else {
            str = arr[0]
        }
        dict[str]! += point // 점수 추가
    }
    
    for i in 0..<checkList.count {  // 지표 순서대로 순회하며 점수 높은유형 출력
        var str = checkList[i].map{String($0)}
        if dict[str[0]]! < dict[str[1]]! {
            resultStr += "\(str[1])"
        } else if dict[str[0]]! > dict[str[1]]! {
            resultStr += "\(str[0])"
        } else {
            str.sort{$0 < $1}   // 점수가 같으면 사전순으로
            resultStr += "\(str[0])"
        }
    }
    
    return resultStr
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

나머지가 1이 되는 수 찾기 Swift  (0) 2023.04.10
신고 결과 받기 Swift  (0) 2023.04.10
숫자 짝궁 Swift  (0) 2023.04.10
삼총사 Swift  (0) 2023.04.10
콜라 문제 Swift  (0) 2023.04.10

문제 설명

두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.

예를 들어, X = 3403이고 Y = 13203이라면, X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다. 다른 예시로 X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)
두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.

제한사항
  • 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
  • X, Y는 0으로 시작하지 않습니다.
  • X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.

내가 푼 풀이

x나 y 중 문자열이 짧은것을 Dictionary에 저장한다. [String: Int] 로 문자열에 나온 숫자의 갯수를 저장

문자열이 긴 문자를 돌면서 같은 문자가 나오는지 검사한다. 문자의 갯수는 저장된 dict에서 차감시키면서 검사

조건에 만족하는 문자들을 따로 배열에 저장해서 출력한다

 

문자열의 길이가 최대 3,000,000 이여서 자칫 잘못하면 시간초과가 뜰꺼라 생각하고 for 반복문을 단독적으로 사용하게끔 했다.

그리고 고차함수와 배열의 함수 map, filter, sort, joined를 겹겹이 사용하지 않도록 유의했다.

예로 return result.sort{ $0 > $1}.joined(separator: "") 은 시간초과가 떴고,

정렬을 따로하고 return result.joined(separator: "") 을 하니 아슬아슬하게 초과가 뜨지않았다.

 

 

import Foundation

func solution(_ X:String, _ Y:String) -> String {
    var xArr = X.map{String($0)}
    var yArr = Y.map{String($0)}
    var dict = [String: Int]()
    var result = [String]()

    if xArr.count > yArr.count {
        for i in yArr {
            if dict[String(i)] == nil {
                dict[String(i)] = 1
            } else {
                dict[String(i)]! += 1
            }
        }
        for j in 0..<xArr.count {
            if dict[xArr[j]] == nil || dict[xArr[j]]! == 0 {
                continue
            } else {
                dict[xArr[j]]! -= 1
                result.append(xArr[j])
            }
        }
    } else {
        for i in xArr {
            if dict[String(i)] == nil {
                dict[String(i)] = 1
            } else {
                dict[String(i)]! += 1
            }
        }
        for j in 0..<yArr.count {
            if dict[yArr[j]] == nil || dict[yArr[j]]! == 0 {
                continue
            } else {
                dict[yArr[j]]! -= 1
                result.append(yArr[j])
            }
        }
    }
    result.sort{ $0 > $1}
    if result.isEmpty {
        return "-1"
    } else {
        if result.filter{ $0 == "0"}.count == result.count {
            return "0"
        } else {
            return result.joined(separator: "")
        }
    }
    
}

 

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

신고 결과 받기 Swift  (0) 2023.04.10
성격 유형 검사하기 Swift  (0) 2023.04.10
삼총사 Swift  (0) 2023.04.10
콜라 문제 Swift  (0) 2023.04.10
옹알이(2) Swift  (0) 2023.04.10

문제 설명

한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.


제한사항
  • 3 ≤ number의 길이 ≤ 13
  • -1,000 ≤ number의 각 원소 ≤ 1,000
  • 서로 다른 학생의 정수 번호가 같을 수 있습니다.

내가 푼 풀이

number 배열을 순회해서 나올수 있는 모든 크기가 3인 배열을 뽑는다 (조합 5C3)

뽑은 배열중에 합산이 0인 배열의 갯수를 출력한다.

 

import Foundation

func solution(_ number:[Int]) -> Int {
    var arr = [[Int]]()

    for i in 0..<number.count-2 {
        for j in i+1..<number.count-1 {
            for k in j+1..<number.count {
                var arr1 = [number[i],number[j], number[k]]
                arr.append(arr1)
            }
        }
    }
    return arr.filter{$0.reduce(0, +) == 0}.count
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

성격 유형 검사하기 Swift  (0) 2023.04.10
숫자 짝궁 Swift  (0) 2023.04.10
콜라 문제 Swift  (0) 2023.04.10
옹알이(2) Swift  (0) 2023.04.10
햄버거 만들기 Swift  (0) 2023.04.10

문제 설명

오래전 유행했던 콜라 문제가 있습니다. 콜라 문제의 지문은 다음과 같습니다.

정답은 아무에게도 말하지 마세요.

콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가?

단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다.

문제를 풀던 상빈이는 콜라 문제의 완벽한 해답을 찾았습니다. 상빈이가 푼 방법은 아래 그림과 같습니다. 우선 콜라 빈 병 20병을 가져가서 10병을 받습니다. 받은 10병을 모두 마신 뒤, 가져가서 5병을 받습니다. 5병 중 4병을 모두 마신 뒤 가져가서 2병을 받고, 또 2병을 모두 마신 뒤 가져가서 1병을 받습니다. 받은 1병과 5병을 받았을 때 남은 1병을 모두 마신 뒤 가져가면 1병을 또 받을 수 있습니다. 이 경우 상빈이는 총 10 + 5 + 2 + 1 + 1 = 19병의 콜라를 받을 수 있습니다.

문제를 열심히 풀던 상빈이는 일반화된 콜라 문제를 생각했습니다. 이 문제는 빈 병 a개를 가져다주면 콜라 b병을 주는 마트가 있을 때, 빈 병 n개를 가져다주면 몇 병을 받을 수 있는지 계산하는 문제입니다. 기존 콜라 문제와 마찬가지로, 보유 중인 빈 병이 a개 미만이면, 추가적으로 빈 병을 받을 순 없습니다. 상빈이는 열심히 고심했지만, 일반화된 콜라 문제의 답을 찾을 수 없었습니다. 상빈이를 도와, 일반화된 콜라 문제를 해결하는 프로그램을 만들어 주세요.

콜라를 받기 위해 마트에 주어야 하는 병 수 a, 빈 병 a개를 가져다 주면 마트가 주는 콜라 병 수 b, 상빈이가 가지고 있는 빈 병의 개수 n이 매개변수로 주어집니다. 상빈이가 받을 수 있는 콜라의 병 수를 return 하도록 solution 함수를 작성해주세요.


제한사항
  • 1 ≤ b < a  n ≤ 1,000,000
  • 정답은 항상 int 범위를 넘지 않게 주어집니다.

내가 푼 풀이

빈병을 a로 나눈 몫을 결과에 합산해주고, 받은 병을 다시 빈병으로 리필해서 결과를 출력한다. 콜라를 최대한 받아야 하므로, 콜라를 받으면 바로 빈병으로 추가한다.

 

import Foundation

func solution(_ a:Int, _ b:Int, _ n:Int) -> Int {
    var coke = 0
    var noCoke = n
    var result = 0
    
    while noCoke >= a {
        var num = noCoke / a * b
        result = result + (noCoke / a * b)
        noCoke = noCoke % a
        coke += num
        if coke > 0 {
            noCoke += coke
            coke = 0
        }
    }
    return result
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

숫자 짝궁 Swift  (0) 2023.04.10
삼총사 Swift  (0) 2023.04.10
옹알이(2) Swift  (0) 2023.04.10
햄버거 만들기 Swift  (0) 2023.04.10
푸드 파이트 대회 Swift  (0) 2023.04.10

문제 설명

머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.


제한사항
  • 1 ≤ babbling의 길이 ≤ 100
  • 1 ≤ babbling[i]의 길이 ≤ 30
  • 문자열은 알파벳 소문자로만 이루어져 있습니다.

내가 푼 풀이

모든 경우의 수를 순회하는 방법을 이용했는데 주어진 배열의 크기와 문자열의 크기가 작아서 시간초과는 뜨지 않았다.

말할 수 있는 문자의 앞문자를 dictionary에 저장하고 검사했다

1. 말할 수 있는 문자열로 시작하는가?

-> 시작하지 않으면 다음 문장으로 건너뛰기 , 시작하면 계속 검사

2. 만들어진 문자열이 말할 수 있는 문자인가?

-> 말할 수 없는 문자열이라면 계속 순회해서 검사배열에 저장

3. 그 문자가 바로 직전에 말했던 문자인가?

-> 직전의 문자와 다르면 계속 검사, 같다면 말할 수 없는 문자열로 판단

이렇게 문자배열을 모두 돌고 검사하지못한 문자가 있다면 말할 수 없는 문자열로 판단한다.

 

Swift는 문자열을 다루기 까다로워서 처음에 어떻게 접근할지 막막했다. 이는 내가 String과 관련된 함수를 잘 알고 있지 않아서 그런것도 있고, 문제의 정답을 돌고돌아서 맞춘느낌이 컸다. String관련된 함수를 숙지해두자.

문제 6번이 한번 시간초과가 떴었는데, 반복문 구조는 같지만 알고리즘이 틀렸을때는 시간초과가 뜨지않아서 시간을 좀 줄일 방법을 생각했다.

순회중 검사를 위한 checkArr 배열이 문자로 만들었을때 말할 수 있다면 checkArr배열을 비워야하는데 removeAll() 함수를 사용했었다.

removeAll()은 O(N) 만큼 걸린다. 그래서 checkArr = [] 로 아예 빈 배열로 지정했더니 시간초과가 뜨지않았다.

import Foundation

func solution(_ babbling:[String]) -> Int {
    var talk = babbling
    var strArr = ["aya", "ye", "woo", "ma"]
    var dict: [String: Int] = ["a": 0, "y": 1, "w": 2, "m": 3]
    var result = 0
    
    for i in 0..<talk.count {   // 모든 문자열 순회
        var strs = talk[i].map{String($0)}
        var idx = 0
        var number = -1 // 말할 수 있는 문자열 번호
        var canTalk = true
        var prevStr = ""    //바로 이전에 말했던 문자열
        var checkArr = [String]()
        
        while idx < strs.count {    // 문자열 순회
            if number == -1 {   // 문자의 첫문자 검사
                if dict[strs[idx]] == nil { // 발음 가능한 문자열로 시작하는지 검사
                    canTalk = false
                    break
                } else {
                    number = dict[strs[idx]]!
                }
            }
            checkArr.append(strs[idx])
            var str = checkArr.joined(separator: "")
            if strArr.contains(str) {   // 문자를 추가한 후 그 문자열이 발음가능한지 검사
                if prevStr == str { // 이전에 말했던 문자열인지 검사
                    canTalk = false
                    break
                } else {    // 새로운 발음 가능한 문자라면 이전문자갱신
                    prevStr = str
                    checkArr = []
                    number = -1
                }
            }
            idx += 1
        }
        if canTalk && checkArr.isEmpty {    // 발음 가능한 문자열로 이루어졌는지, 중간에 발음이 불가능한 문자가 섞였는지 확인
            result += 1
        }
    }
    
    return result
}

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

삼총사 Swift  (0) 2023.04.10
콜라 문제 Swift  (0) 2023.04.10
햄버거 만들기 Swift  (0) 2023.04.10
푸드 파이트 대회 Swift  (0) 2023.04.10
과일 장수 Swift  (0) 2023.04.10

+ Recent posts