요구능력 : 문자열에 대한 이해
코드설명 :
이 문제에서 핵심
1. 단어 자체가 이전에 나온적이 있는지 확인
2. 바로 이전단어의 끝 문자가 현재단어의 맨 앞문자와 일치하는지 확인 ex) char -> r로 시작해야됨
3. 끝말잇기를 성공한 경우를 확인
변수설명
count = 차례를 계산하기위해 수를 세는 변수
arr = 단어를 arr에 저장하면서 새로운 단어를 저장할 때 그게 앞전에 나온적이 있는지 확인하기 위한 변수
result = 결과를 저장하고 return하기 위함
order = 탈락자가 몇번째 순서인지 세기 위함.
1. 단어 자체가 이전에 나온적이 있는지 확인
contains() 함수를 사용하여 이전에 단어가 나온적이 있는지 확인 하였다.
2. 바로 이전단어의 끝 문자가 현재단어의 맨 앞문자와 일치하는지 확인 ex) char -> r로 시작해야됨
String을 캐릭터 배열 형태로 변형하고 배열의 last와 first를 적절히 사용하여 비교하였음.
3. 끝말잇기를 성공한 경우를 확인
arr의 수와 words의 수가 같은 경우에는 아무 조건에 걸리지않고 arr에 words를 잘 옮긴것이므로 끝말잇기가 성공적으로 끝난경우임.
4. 부가설명
이 부분은 count>=1을 넣어준 이유가 안넣어주면 처음에 count가 0일때 걸리게된다.
원래 목적인 이전단어의 끝글자와 다음단어의 첫글자를 비교하는 것이 아닌 현재단어의 첫글자와 끝글자를 비교하게됨.
ex) Hello가 있으면 H와 o를 비교하게된다.
if count >= 1 && temp != firstIdxArr.first!{
break
}
이건 몇번째에서 탈락하는지 구하기위한 식인데 내가 복잡하게 구한것일 수도있다.
result.append(Int(ceil((count + 1.0)/Double(n))) )
후기 : 문자열 분해할줄알고 흐름에 맞게 조건만 맞춰줄수 있다면 쉬운문제
func solution(_ n:Int, _ words:[String]) -> [Int] {
var count: Double = 0
var arr: [String] = []
var result: [Int] = []
var order = 0
//배열에 하나씩 저장하면서 contains하고있으면 ..
for i in words{
order += 1
if order > n {
order = 1
}
if !arr.contains(i){
var temp: Character = " "
//처음에 last가 없어서 걸리니까 if let써서 땡기자.
if let last = arr.last {
for k in last{
temp = k
}
}
arr.append(i)
var firstIdxArr: [Character] = []
for v in i{
firstIdxArr.append(v)
}
// print("\(arr)")
// print("firstIdx : \(firstIdxArr.first!)")
// print("temp : \(temp)")
if count >= 1 && temp != firstIdxArr.first!{
break
}
count += 1
}else{
break
}
}
if arr.count == words.count {
result.append(0)
result.append(0)
}else {
result.append(order)
result.append(Int(ceil((count + 1.0)/Double(n))) )
}
return result
}
'Algorithm > 문제풀이_프로그래머스' 카테고리의 다른 글
[Swift][프로그래머스][LV_1] 신고결과받기 (0) | 2022.02.19 |
---|---|
[Swift][프로그래머스][LV_1] 예산 (0) | 2021.11.19 |
[Swift][문자열][LV2][프로그래머스] 스킬트리 (0) | 2021.11.18 |
[Swift][DFS][LV_2][프로그래머스] 배달 (0) | 2021.11.18 |
[Swift][DFS][LV_1][프로그래머스] 소수 만들기 (0) | 2021.11.06 |
댓글