📌 문제
📌 풀이 1: [Character: Int] 형태의 딕셔너리
딕셔너리를 이용해 주어진 문자열의 인덱스를 지날 때마다, 해당 값의 알파벳을 딕셔너리의 값에서 1을 더하는 식으로 문제를 풀었다.
📌 코드
// 입력 받은 문자열을 input에 할당
let input = readLine()!
// 함수에 input을 대입하여 출력
print(findWordOfMaxFrequency(input))
// 주어진 단어에서 가장 많이 사용된 알파벳을 대문자로 출력하는 함수 정의
func findWordOfMaxFrequency(_ word: String) -> Character {
var charFrequency: [Character: Int] = [:]
var maxCharFrequency: Int = 0
var maxChar: Character = " "
var flag: Int = 0
var result: Character = " "
// 입력된 단어를 모두 대문자로 바꿔 각 단어의 빈도수를 딕셔너리에 업데이트
for alpha in word.uppercased() {
if charFrequency[alpha] == nil {
charFrequency[alpha] = 1 // 단어가 처음일 경우 빈도수를 1로 할당
}
else {
// Optional<Int>을 강제로 해제
charFrequency[alpha]! += 1 // 단어가 처음이 아니면 1 증가 후 대입
}
}
// 앞서 업데이트한 단어와 빈도수의 딕셔너리에서 빈도수의 최댓값 찾기
for (char, frequency) in charFrequency {
// 최댓값이 바뀔 경우 가장 많이 사용된 단어와 그 빈도수를 업데이트
if frequency > maxCharFrequency {
maxChar = char
maxCharFrequency = frequency
flag = 0
} else if frequency == maxCharFrequency && frequency != 0 {
flag += 1 // 최댓값이 중복일 경우 flag 증가
}
}
if flag == 0 {
result = maxChar // flag가 0일 경우 가장 많이 사용된 단어 출력ㅌ
} else {
result = "?" // flag가 0이 아니면 중복되었으니 "?" 출력
}
// 결괏값을 반환
return result
}
📌 풀이 2: 아스키 코드를 인덱스로 이용한 배열
이번에는 딕셔너리가 아닌 알파벳에 해당하는 아스키 코드를 배열의 인덱스로 사용하여 문제를 풀었다.
아래 영상을 통해 아이디어를 구했는데 풀이 1보다 더 쉽게 풀 수 있었다.
단어 공부 (1157, 브론즈 1, 문자열) - 자바 Java 백준 문제 풀이 - YouTube | 개발자로 취직하기
📌 코드 2: 아스키 코드를 인덱스로 이용한 배열
(업데이트 예정)
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] (Swift) 1850번: 최대공약수 (0) | 2023.04.03 |
---|---|
[백준] (Python/Swift) 3040번: 백설 공주와 일곱 난쟁이 (0) | 2023.03.25 |
[백준] (Swift) 3613번: Java vs C++ (0) | 2023.03.21 |
[백준] (Swift) 10872번: 팩토리얼 (재귀 vs 반복) (2) | 2023.03.18 |
[백준] (Swift) 10769번: 행복한지 슬픈지 (0) | 2023.03.18 |
댓글