728x90
입력값 내에서 가장 많이 사용된 알파벳을 찾는 문제이다.
이 문제를 풀면서 생각한 논리적 흐름은
- 값을 스트링 값으로 통째로 입력 받고
- 통째로 어퍼케이스로 변경시킨다. (Character는 Upper, Lower로 변경하는게 까다로워서...)
- 바뀐 값을 Character로 하나씩 쪼개어 Array에 지정해준다.
- Uppercase로 저장된 Array의 캐릭터 갯수 확인
- 이 중 가장 많은 횟수를 차지한 캐릭터의 Key를 Print
이 문제에서 가장 많은 시간을 쓴 것은 character를 string만큼 간단하게 upper or lower로 변경하기 어렵다는 것과
결국 마지막 단계에서 최대값이 같은 Key들이 발생했을 경우 이를 "?" 퀘스쳔 마크로 프린트 해주는 것이었다.
논리적으로는 맥스 값이 같은 케이스가 2번 이상 나오면 이러한 경우는 전부 print("?") 처리해버린다라는게 자연스럽지만
막상 코드로 구현하려니 생각보다 번거로웠다.
결국 코드의 작동 순서를 이용하여 먼저 맥스 값이 중복되는 사례가 있는지 확인하고
중복되는 경우가 있을 경우
print("?")
중복되는 경우가 없을 경우
해당 맥스 값과 동일한 값을 가지는 value의 key를 print 하는 방식으로 진행하였다.
* 1157번
let str = readLine()
var strUpper = str!.uppercased()
var arr = [Character]()
var counts: [Character: Int] = [:]
var score = 0
for i in strUpper {
arr.append(i)
}
for j in arr {
counts[j] = (counts[j] ?? 0) + 1
}
for z in counts.keys {
if counts[z] == counts.values.max() {
score += 1
}
}
if score > 1 {
print("?")
} else {
for x in counts.keys {
if counts[x] == counts.values.max() {
print(x)
}
}
}
정리(Today I Learned)
- String과 Character는 문자 자체를 하나하나 쪼개 보느냐 아니면 문자열 등으로 묶어 보느냐의 차이가 존재한다.
- String과 Character는 사람이 생각하기엔 크게 다르지 않은 개념 같지만 컴퓨터가 인식하기엔 굉장히 많은 차이가 존재하여 각 type에 맞는 함수들도 사용 방법이 완전히 다르다.
- Character에 uppercase() 함수를 사용할 수 없다.
'TIL > 알고리즘 공부' 카테고리의 다른 글
백준 2908번 Swift 알고리즘 연습 (0) | 2022.08.22 |
---|---|
백준 1152번 Swift 알고리즘 연습 (0) | 2022.08.16 |
백준 2675번 Swift 알고리즘 연습 (0) | 2022.08.12 |
백준 10809번 Swift 알고리즘 연습 (0) | 2022.08.12 |
백준 11720번 Swift 알고리즘 연습 (0) | 2022.08.09 |