TIL/알고리즘 공부
프로그래머스 Lv. 2 Swift 알고리즘 - 모음 사전
여의도사노비
2023. 1. 20. 16:18
728x90
이 문제는 뭔가 묘하다.
답은 맞았지만 정말 야매로 맞은 것만 같은 느낌... 시간 제한이 없어서 그런것 같다...
시간 제한이 있었다면 전부 틀렸을듯 ^-^
프로그래머스에서 문제를 보면 완전탐색 문제더라! 굳이 함수로 만들지 않아도 됐지만... 완전탐색을 할 수 있는 함수도 따로 만들어보았다.
그냥 가능한 가짓수를 전부 만들어서 배열에 때려 박고 아주 좋은 기능인 sorted 메소드 써주고 완전탐색 해주면 끝 ㅎ
이 문제를 풀면서 생각한 논리적 흐름
- arr에 한 글자만 들어가는 경우, 두 글자 들어가는 경우... 5글자 모두 들어가는 경우를 모두 arr에 추가한다.
- 그 다음 이 모든 원소가 모여져있는 arr를 정렬하고
- 원소 하나하나 비교해주는 완전탐색을 사용하면 끝!
- 아 근데 Count로 횟수를 세어주어야 하니 몇번만에 탐색이 끝났는지 알려주는 count도 추가!
* 코드
func solution(_ word: String) -> Int {
let arrWord = ["A", "E", "I", "O", "U"]
var arr: [String] = []
for a in arrWord {
arr.append(a)
}
for a in arrWord {
for b in arrWord {
arr.append(a + b)
}
}
for a in arrWord {
for b in arrWord {
for c in arrWord {
arr.append(a + b + c)
}
}
}
for a in arrWord {
for b in arrWord {
for c in arrWord {
for d in arrWord {
arr.append(a + b + c + d)
}
}
}
}
for a in arrWord {
for b in arrWord {
for c in arrWord {
for d in arrWord {
for e in arrWord {
arr.append(a + b + c + d + e)
}
}
}
}
}
arr = arr.sorted()
return sequencial(arr, word: word)
}
func sequencial(_ array: [String], word: String) -> Int {
var count = 0
for element in array {
count += 1
if word == element {
return count
}
}
return 0
}
정리(Today I Learned)
- 조금 더 고급진 방법이 없을까 하고 구글링을 해보니 문제의 표면만 생각하고 풀지 않은 분이 계셨다.
- 평소에도 자주 참고하던 블로그를 운영하시는 분의 코드인데 솔직히 아직도 이해가 잘 안가긴 하지만 효율성 면에서 미친것 같다!!
- 완전탐색이니까 모든 배열의 원소들을 하나씩 다 비교해도 맞겠지~ 하며 넘어가는 것도 효율적일 수 있겠지만...
- 이렇게 문제를 해석하는 방식을 한차원 높이는 것이 더 멋지다!
- https://fomaios.tistory.com/entry/Swift-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9C%84%ED%81%B4%EB%A6%AC-%EC%B1%8C%EB%A6%B0%EC%A7%80-5%EC%A3%BC%EC%B0%A8-%EB%AA%A8%EC%9D%8C-%EC%82%AC%EC%A0%84
[Swift] 프로그래머스 위클리 챌린지 5주차 모음 사전
Problem 코딩테스트 연습 - 5주차 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"
fomaios.tistory.com