본문 바로가기
코딩 테스트/백준

[백준] (Swift) 1157번: 단어 공부

by Dev.Andy 2023. 3. 22.

📌 문제

1157번: 단어 공부

 

 

📌 풀이 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: 아스키 코드를 인덱스로 이용한 배열

(업데이트 예정)

 

댓글