728x90
📌 풀이
우선 플레이어 1, 2, 3의 찍기 패턴을 등록한다. 그리고 추후 점수를 기록할 scores도 IntArray로 초기화해 놓는다.
파이썬의 enumerate의 기능을 하는 withIndex와 나머지공식을 사용해 점수 배열과 플레이어의 패턴을 비교해 같을 경우 score에 1씩 더해준다.
마지막에 scores를 똑같이 withIndex로 for문을 돌려놓고 max인 값과 비교해 같다면 해당 자리의 인덱스를 result에 넣어 정답을 구하면 된다.
근데 여기서 문제가 하나 있었는데 프로그래머스의 코틀린 컴파일 버전에서 maxOrNull을 지원하지 않았다.
따라서 제출 할때는 java의 컬렉션을 불러와 새롭게 max를 지정해 제출했다.
코드 1 (프로그래머스에서는 에러)
class Solution {
fun solution(answers: IntArray): IntArray {
var result = mutableListOf<Int>()
val player1 = intArrayOf(1, 2, 3, 4, 5)
val player2 = intArrayOf(2, 1, 2, 3, 2, 4, 2, 5)
val player3 = intArrayOf(3, 3, 1, 1, 2, 2, 4, 4, 5, 5)
var scores = intArrayOf(0 ,0, 0)
for ((idx, answer) in answers.withIndex()){
if (answer == player1[idx % 5]){
scores[0] += 1
}
if (answer == player2[idx % 8]){
scores[1] += 1
}
if (answer == player3[idx % 10]){
scores[2] += 1
}
}
for ((idx, score) in scores.withIndex()){
if (score == scores.maxOrNull()){
result.add(idx + 1)
}
}
return result.toIntArray()
}
}
코드 2 (프로그래머스에서도 정답)
import java.util.*
class Solution {
fun solution(answers: IntArray): IntArray {
var result = mutableListOf<Int>()
val player1 = intArrayOf(1, 2, 3, 4, 5)
val player2 = intArrayOf(2, 1, 2, 3, 2, 4, 2, 5)
val player3 = intArrayOf(3, 3, 1, 1, 2, 2, 4, 4, 5, 5)
var scores = arrayListOf(0 ,0, 0)
for ((idx, answer) in answers.withIndex()){
if (answer == player1[idx % 5]){
scores[0] += 1
}
if (answer == player2[idx % 8]){
scores[1] += 1
}
if (answer == player3[idx % 10]){
scores[2] += 1
}
}
val max = Collections.max(scores)
for ((idx, score) in scores.withIndex()){
if (score == max){
result.add(idx + 1)
}
}
return result.toIntArray()
}
}
'Algorithm' 카테고리의 다른 글
[코틀린] 프로그래머스 64061(크레인 인형뽑기 게임) (0) | 2022.01.19 |
---|---|
[파이썬] 프로그래머스 64061(크레인 인형뽑기 게임) (0) | 2022.01.19 |
[파이썬] 프로그래머스 42840(모의고사) (0) | 2022.01.19 |
백준 알고리즘 파이썬(Python) 1009번 분산처리 (0) | 2022.01.05 |
리트코드(LeetCode) 561번 배열 파티션(Array Partition) (0) | 2021.09.27 |