fun solutionContains(participant: Array<String>, completion: Array<String>): String {
val c = completion.toMutableList()
for (name in participant) {
if (!c.contains(name)) {
return name
}
c.remove(name) // 이미 매칭된 원소는 지워야 동명이인 처리가 됨
}
return ""
}
fun solution(participant: Array<String>, completion: Array<String>): String {
val map = HashMap<String, Int>()
// 1. participant 각 이름의 등장 횟수를 +1
for (name in participant) {
map[name] = map.getOrDefault(name, 0) + 1
}
// 2. completion 각 이름의 등장 횟수를 -1
for (name in completion) {
map[name] = map.getOrDefault(name, 0) - 1
}
// 3. 카운트가 0보다 크게 남은 이름 = 완주 못한 사람
for ((name, count) in map) {
if (count > 0) return name
}
return "" // 못 찾은 경우 (여기 도달하면 안 됨)
}
다음에 비슷한 문제 보면 떠올릴 키워드:
"빠르게 존재 여부/개수를 확인해야 한다", "몇 번 등장했는지 세야 한다" (빈도수 계산),
. "A그룹과 B그룹을 비교해서 차이/교집합/합집합을 찾아야 한다",
"정렬 없이 순서 상관없이 빠르게 처리해야 한다"
해시맵이 아닌 신호:
"순서가 중요하다" / "인덱스 위치 자체가 의미 있다" → 배열/리스트가 맞음
"정렬된 상태를 유지해야 한다" → TreeMap이나 정렬 후 처리
"값 하나만 저장하면 되고 개수는 필요 없다" → HashSet이 해시맵보다 더 적합 (오늘 문제도 사실 카운트까지 필요 없으면 Set으로도 풀 수 있어요, 다만 동명이인 때문에 카운트가 필요해서 HashMap을 쓴 거고요)
fun solution(nums: IntArray): Int {
val distinctCount = nums.toSet().size // 요인 1: 서로 다른 종류 수
val pickLimit = nums.size / 2 // 요인 2: 고를 수 있는 최대 개수
return minOf(distinctCount, pickLimit) // 둘 중 더 "제한이 되는" 쪽
}
class Solution {
fun solution(numbers: IntArray): IntArray {
val result = mutableListOf<Int>()
for (i in 0 until numbers.size) {
for (j in i + 1 until numbers.size) {
result.add(numbers[i] + numbers[j])
}
}
return result.toHashSet().sorted().toIntArray()
}
}
import kotlin.math.max
class Solution {
fun solution(answers: IntArray): IntArray {
var answer = intArrayOf()
val first = intArrayOf(1,2,3,4,5)
val second = intArrayOf(2,1,2,3,2,4,2,5)
val third = intArrayOf(3,3,1,1,2,2,4,4,5,5)
val ansMut = arrayListOf<Int>(0,0,0)
var cnt = 0
answers.forEach {
if(it == first[cnt % first.size]) ansMut[0]++
if(it == second[cnt % second.size]) ansMut[1]++
if(it == third[cnt % third.size]) ansMut[2]++
cnt++
}
for(i in 0..2) {
if(ansMut.maxOrNull() == ansMut[i]) answer = answer.plus(i + 1)
}
answer.sort()
return answer
}
}
cnt % 배열.size로 순환 시키는 것을 다시 한 번 기억하자..
var n = 5
val mLost = mutableListOf(2,4)
val mReserve = mutableListOf(1,3,5)
for(i in mLost) {
if(i - 1 in mReserve) {
mReserve.remove(i-1)
mLost.remove(i)
} else if(i + 1 in mReserve) {
mReserve.remove(i+1)
mReserve.add(i)
}
}
class Solution {
fun solution(n: Int, lost: IntArray, reserve: IntArray): Int {
var mLost = mutableListOf<Int>()
var mReserve = mutableListOf<Int>()
var answer = 0
lost.forEach { mLost.add(it) }
reserve.forEach { mReserve.add(it) }
mLost.sort()
for(i in 1..n) {
if(i in mLost && i in mReserve) {
mReserve.remove(i)
mLost.remove(i)
}
}
for (i in 1..n) {
if (i in mLost) {
if (i - 1 in mReserve) {
mReserve.remove(i - 1)
mLost.remove(i)
} else if (i + 1 in mReserve) {
mReserve.remove(i + 1)
mLost.remove(i)
}
}
}
answer = n - mLost.size
return answer
}
}
항상 제한 사항을 주의깊게 보자 제발
fun main() {
val array = intArrayOf(1,5,2,6,3,7,4)
val commands = arrayOf(intArrayOf(2,5,3),intArrayOf(4,4,1),intArrayOf(1,7,3))
var mArray = mutableListOf<Int>()
for(i in commands) {
var list = mutableListOf<Int>()
for(j in i[0] - 1 until i[1]) { // 2 .. 5
list.add(array[j])
}
mArray.add(list.sorted() [ i[2] - 1 ] )
}
println(mArray)
}
class Solution {
fun solution(board: Array<IntArray>, moves: IntArray): Int {
var bag = mutableListOf<Int>()
var answer = 0
var arr = mutableListOf<MutableList<Int>>()
for(i in board.size - 1 downTo 0) {
val ele = mutableListOf<Int>()
for(j in board[i]) {
ele.add(j)
}
arr.add(ele)
}
for(move in moves) {
for(i in arr.size - 1 downTo 0) {
if(arr[i][move - 1] <= 0 ) continue
else {
val last = arr[i][move - 1]
if(bag.isNotEmpty() && bag.last() == last) {
bag.removeLast()
answer += 2
} else bag.add(last)
arr[i][move - 1] = -1
break
}
}
}
return answer
}
}
class Solution {
fun solution(N: Int, stages: IntArray): IntArray {
var answer = mutableMapOf<Int, Double>()
var total = stages.size
for(i in 1 .. N) {
val person = stages.filter { it == i }.size
if(person == 0) {
answer[i] = 0.0
continue
}
answer[i] = person.toDouble() / total
total -= person
}
return answer.toList().sortedByDescending{ it.second }.map{ it.first }.toIntArray()
}
}
1차 코드
class Solution {
fun solution(strings: Array<String>, n: Int): Array<String> {
var answer = mutableListOf<String>()
for(i in strings) answer.add(i)
answer.sort()
answer.sortBy { it[n] }
return answer.toTypedArray()
}
}
2차 코드
class Solution {
fun solution(strings: Array<String>, n: Int): Array<String> {
return strings.sorted().sortedBy { it[n] }.toTypedArray()
}
}
class Solution {
fun solution(lottos: IntArray, win_nums: IntArray): IntArray {
var answer: IntArray = intArrayOf(0,0)
var same = 0
var zero = 0
for(i in lottos) {
if(win_nums.contains(i)) same++
if(i == 0) zero++
}
var pride = 7 - same - zero
// 최고 등수
if(1 <= pride && pride <= 6) answer[0] = pride else answer[0] = 6
// 최저 등수
if(1 <= same && same <= 6) answer[1] = 7 - same else answer[1] = 6
return answer
}
}