https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
문제접근
알파벳 대소문자로 된 단어가 주어진다. 만약 abcc라는 입력이 들어온다고 생각해 보자! 그럼 정답으로 원하는 답은 c가 될 것이라는 것을 알 수가 있다. 그럼 a는 1번, b는 1번, c는 2번이라는 정보를 저장해주어야 한다. a는 1이라는 걸 보면 무엇인가 떠오르지 않나?? 딕셔너리 형태를 띠고 있다고 생각이 들 수 있다. a를 Key값으로 1을 Value 값으로 넣어줘서 Value 값들을 비교해서 가장 큰 값을 찾아내보자!
딕셔너리 잘 모르겠다면 이걸 한번 보고 오자!! 나도 잘 몰라서 제대로 못 썻다.. 공부하기 전까지는
https://h2kangrok.tistory.com/15
[Swift] Dictionary
코테를 풀다가 딕셔너리를 사용해서 푸는 문제인데... 왜?? 딕셔너리로 풀어야 하는지 이해가 되지 않았다!! 왜냐!! 그냥 딕셔너리에 대해 몰랐으니깐.. 그래서..! 딕셔너리에 대해서 알아보자!!
h2kangrok.tistory.com
정답풀이
import Foundation
let input = readLine()!.uppercased()
var dict: [String:Int] = [:]
var result: [String] = []
for i in input {
if dict[String(i)] == nil {
dict[String(i)] = 1
} else {
dict[String(i)]! += 1
}
}
for key in dict.keys {
if dict[key] == dict.values.max() {
result.append(key)
}
}
print(result.count > 1 ? "?" : "\(result[0])")
알파벳이 대소문자로 들어오기 때문에 uppercased()로 입력을 대문자로 통일시켜 주었다.
for i in input {
if dict[String(i)] == nil {
dict[String(i)] = 1
} else {
dict[String(i)]! += 1
}
}
이 반복문이 어떻게?? 동작하는지 알아보자!!!!
문자열의 문자를 반복하는데, 만약!! messi라는 input이 들어올 때 dict [M] = nil이라면 value 1로 만들어준다. 아니면(이미 존재한다면) 1을 더해준다.
이해하기 어렵다면.. 한번 print 해보자

이런 식으로 값이 들어간다.
그 후 가장 큰 Value값을 가지고 있는 Key값을 result 배열에 넣어준다.
print(result.count > 1 ? "?" : "\(result[0])")
그리고 result 배열의 개수가 1이 넘으면 가장 많이 사용된 알파벳이 여러 개 존재하는 경우니깐 ? 를 출력하고 아니면 배열의 값을 출력한다.
참고자료
https://sapjilkingios.tistory.com/entry/Swift-%EB%B0%B1%EC%A4%80-1157%EB%B2%88
'Algorithm' 카테고리의 다른 글
| [Algorithm] Swift 백준 1181번 (0) | 2024.02.18 |
|---|---|
| [Algorithm] Swift 백준 1018번 (1) | 2024.02.05 |
| [Algorithm] Swift 백준 14467번 (3) | 2023.11.18 |
| [Algorithm] Swift 백준 20546번 (2) | 2023.11.16 |
| [Algorithm] Swift 백준 1292번 (1) | 2023.11.09 |