728x90
https://school.programmers.co.kr/learn/courses/30/lessons/132265
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
1. topping 배열을 copyOfRange 를 이용하여 두 가지 Set 으로 나누어 서로의 크기가 같은 지 비교해서 결과를 구할 경우 첫 번째 케이스를 제외하고는 시간 초과가 발생한다.
2. 시간 초과가 발생하지 않기 위해서 for loop 를 한 번만 수행해야 한다.
3. loop 를 한 번만 수행하면서 철수와 동생의 토핑 종류 개수를 비교하는 로직을 구현 한다.
3-1. 입력의 topping 은 A(철수) Map(Int, Int) 에 저장한다. 이때 Key 는 토핑의 종류이고 Value 는 Key 에 해당하는 토핑의 개수이다.
3-2. topping 배열을 하나씩 탐색한다.
3-3. topping 이 Map A 에 있으면 개수를 하나 빼고 Map A의 개수가 1개 이면 Remove 한다.
3-4. B(동생) Map 에 A 와 같은 형태로 저장한다.
3-5. A와 B Map 의 크기가 같으면 answer 를 증가한다.
4. 결과를 출력한다.
코드
class Solution {
fun solution(topping: IntArray): Int {
var answer: Int = 0
val A = mutableMapOf<Int, Int>()
val B = mutableMapOf<Int, Int>()
topping.forEach { t ->
if (A.containsKey(t)) {
A[t]?.let {
A[t] = it + 1
}
} else {
A[t] = 1
}
}
topping.forEach { t ->
if (A.containsKey(t)) {
A[t]?.let { a ->
if (a > 1) {
A[t] = a - 1
} else {
A.remove(t)
}
}
}
if (B.containsKey(t)) {
B[t]?.let {
B[t] = it + 1
}
} else {
B[t] = 1
}
if (A.size == B.size) answer++
}
return answer
}
}
728x90
'알고리즘(w.KOTLIN) > 자료구조' 카테고리의 다른 글
[프로그래머스][Level1][178871] 달리기 경주 (0) | 2023.06.22 |
---|---|
[백준][KOTLIN][1406] 에디터 (0) | 2023.01.02 |
[알고리즘][KOTLIN] 두 큐 합 같게 만들기 (0) | 2022.12.04 |
[알고리즘][KOTLIN] 택배상자 (0) | 2022.12.03 |