Hash
개념
문제 1. 완주하지 못한 선수
설명
제약 조건
입출력의 예
participant
completion
return
코드
문제 2. 할인 행사
설명
제약 조건
입출력의 예
want
number
discount
result
코드
참고
Last updated

Last updated
fun solution(participant: List<String>, completion: List<String>): String {
var result = ""
// 1. key는 String이고 value는 Int인 hashmap을 정의
val hashmap = HashMap<String, Int>()
// 2. participant 순회
for (name in participant) {
// 2.1. participant 값이 hashmap의 key로 존재하는지 확인
if (hashmap.containsKey(name)) {
// 2.1.true. 해당 key의 value를 1 올림
hashmap[name] = hashmap[name]!! + 1
} else {
// 2.1.false. 해당 key를 추가하고 value를 1 올림
hashmap[name] = 1
}
}
// 3. completion 순회
for (name in completion) {
// 3.1. completion 값이 hashmap의 key로 존재하는지 확인
if (hashmap.containsKey(name)) {
// 3.1.true.1. 존재할 경우 해당 key의 value를 1 낮춤
hashmap[name] = hashmap[name]!! - 1
// 3.1.true.2. value가 0일 경우 해당 key를 hashmap에서 제거
if (hashmap[name] == 0) {
hashmap.remove(name)
}
}
}
// 4. hashmap의 첫 번째 key를 result로 저장
result = hashmap.keys.first()
return result
}fun solution(
want: Array<String>,
number: IntArray,
discount: Array<String>,
): Int {
var answer = 0
// want를 key로 number를 value로 하는 map 생성
val map = mutableMapOf<String, Int>()
// map에 want와 number를 입력
for (i in want.indices) {
map[want[i]] = number[i]
}
// 할인 목록을 저장할 queue 생성
val queue = ArrayDeque<String>()
// discount 순회
for (s in discount) {
// queue의 길이가 10 이상인가?
if (queue.size >= 10) {
// 맞을 경우
// queue의 첫 번째를 꺼내서 map에 동일한 key의 value를 1 증가
val first = queue.removeFirst()
map[first]?.also { map[first] = it + 1 }
}
// map에서 discount와 동일한 key의 value를 1 감소
map[s]?.also { map[s] = it - 1 }
// queue의 마지막으로 discount 입력
queue.addLast(s)
// map의 모든 value가 모두 0인가?
if (map.values.none { it != 0 }) {
// 맞을 경우 answer를 1 증가
answer++
}
}
return answer
}