슈프림 블로그
[프로그래머스] 완전탐색 - 모의고사 (Swift / Java 풀이) 본문
programmers.co.kr/learn/courses/30/lessons/42840?language=swift
n번째 답으로 무엇을 찍었을까??
수포자들은 일정한 패턴을 반복적으로 사용한다고 한다.
그렇다면 n번째 답으로는 몇번을 찍었을지 예측 할 수 있다!
수포자들이 사용하는 패턴의 길이가 count
라고 하면, n번째 위치의 값은 n % count
위치의 패턴 값과 같다.
n번째 문제의 정답과 찍은 답 비교
따라서 n
번째 문제의 정답(answer
배열)과 찍은 답(pattern
배열)을 비교하려면
answer[n
]과 pattern[n % pattern.count]
를 비교하면된다.
총 3명의 수포자 패턴이 있다고??
여기서, 수포자는 3명이므로 patterns
라는 Int형 2차원 배열에 패턴을 고정시켜 넣어주었다.
그리고 반복문을 0~2까지 돌면서 모든 수포자의 찍은 답과 정답을 비교해 주었다.
정답을 맞추면 +1점
corrects
배열은 각 수포자가 맞춘 정답 개수를 담는 배열이다.
위에서 찍은 답과 정답을 비교하면서, 정답을 맞췄을 경우에는 corrects
배열에 각 자리에 +1을 해주었다.
=> 0번째 수포자는 0번 인덱스, 1번째 수포자는 1번 인덱스, 2번째 수포자는 2번 인덱스
가장 많이 맞춘 학생
corrects
배열에서 가장 많이 맞춘 점수를 구한다. = max
그리고 반복문을 돌면서 max
와 같은 점수를 받은 학생의 인덱스를 배열에 넣어서 리턴하면 끝-!
Swift 최종 코드
import Foundation
func solution(_ answers:[Int]) -> [Int] {
let patterns = [[1,2,3,4,5], [2,1,2,3,2,4,2,5], [3,3,1,1,2,2,4,4,5,5]]
var corrects = [0,0,0]
for i in 0..<answers.count {
for j in 0..<3 {
let pattern = patterns[j]
if pattern[i%pattern.count] == answers[i] {
corrects[j] += 1
}
}
}
let max = corrects.max()
var answer = [Int]()
for k in 0..<3 {
if corrects[k] == max {
answer.append(k+1)
}
}
return answer
}
Swift의 경우, 배열이 가변크기이므로 바로 바로 추가해서 그대로 반환하면 되지만,
java의 경우, 배열은 고정크기이므로 일단 ArrayList를 사용하여 가변적으로 값을 추가한다음,
최종 길이가 정해지면 ArrayList와 같은 값을 가진 새로운 고정크기 배열을 생성해서 반환해주었다.
Java 최종 코드
import java.util.ArrayList;
class Solution {
public int[] solution(int[] answers) {
int[][] patterns = {{1,2,3,4,5}, {2,1,2,3,2,4,2,5}, {3,3,1,1,2,2,4,4,5,5}};
int[] corrects = {0,0,0};
for (int i=0; i<answers.length; i++) {
for(int p=0; p<3; p++) {
int[] pattern = patterns[p]
if (answers[i] == pattern[i%pattern.length]) {
corrects[p] += 1;
}
}
}
int max = corrects[0];
max = max > corrects[1] ? max : corrects[1];
max = max > corrects[2] ? max : corrects[2];
ArrayList<Integer> list = new ArrayList<>();
if (max == corrects[0]) {list.add(1);}
if (max == corrects[1]) {list.add(2);}
if (max == corrects[2]) {list.add(3);}
int[] answer = new int[list.size()];
for(int i = 0; i < list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
}
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 동적계획법(Dynamic Programming) - 정수 삼각형 (Python / Swift 풀이) (0) | 2020.09.28 |
---|---|
[프로그래머스] 완전탐색 - 소수 찾기 (Swift 풀이) (0) | 2020.09.23 |
[프로그래머스] 정렬 - H-Index (Swift 풀이) (0) | 2020.09.20 |
[프로그래머스] 정렬 - K번째수 (Swift 풀이) (0) | 2020.09.20 |
[프로그래머스] 정렬 - 가장 큰 수 (Swift 풀이) (1) | 2020.09.19 |