Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 넥사크로
- 쿼리
- Java
- 프로그래머스
- 코틀린
- Security
- 방법
- JPA
- GitHub
- Eclipse
- kotlin
- 오라클
- mybatis
- IntelliJ
- Git
- Spring
- 자바
- JavaScript
- jquery
- 스프링
- 시큐리티
- aws
- 에러
- 알고리즘
- error
- Vue
- db
- 생성
- oracle
- 함수
Archives
- Today
- Total
송민준의 개발노트
프로그래머스-level1-모의고사 본문
https://programmers.co.kr/learn/courses/30/lessons/42840
예전에 풀었던 자바코드를 보니 참담하다...
자바스크립트로 풀어봤다... 조금은 짧아진거 같다.
function solution(answers) {
const onePattern = [1, 2, 3, 4, 5];
const twoPattern = [2, 1, 2, 3, 2, 4, 2, 5];
const threePattern = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
const oneCount = check(onePattern, answers);
const target1 = {
index: 1,
count: oneCount
};
const twoCount = check(twoPattern, answers);
const target2 = {
index: 2,
count: twoCount
};
const threeCount = check(threePattern, answers);
const target3 = {
index: 3,
count: check(threePattern, answers)
};
const targetArray = [target1, target2, target3];
const maxValue = Math.max(oneCount, twoCount, threeCount);
return targetArray.sort((a, b) => a.count - b.count)
.filter((v) => v.count === maxValue)
.map(v => v.index);
}
function check(pattern, answer) {
let count = 0;
const patternLength = pattern.length;
for(let i = 0; i < answer.length; i++) {
const rem = (i % patternLength);
if(answer[i] === pattern[rem]) {
count++;
}
}
return count;
}
참고할 코드
function solution(answers) {
var answer = [];
var a1 = [1, 2, 3, 4, 5];
var a2 = [2, 1, 2, 3, 2, 4, 2, 5]
var a3 = [ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
var a1c = answers.filter((a,i)=> a === a1[i%a1.length]).length;
var a2c = answers.filter((a,i)=> a === a2[i%a2.length]).length;
var a3c = answers.filter((a,i)=> a === a3[i%a3.length]).length;
var max = Math.max(a1c,a2c,a3c);
if (a1c === max) {answer.push(1)};
if (a2c === max) {answer.push(2)};
if (a3c === max) {answer.push(3)};
return answer;
}
===========================오래 전 자바 풀이===================================
나의 풀이.
2차원 배열을 활용하였고 4번째(인덱스 3)에는 점수가 각각 들어가있다.
시간이 좀 들었던 문제...
평균 속도 : 15ms
class Solution {
public int[] solution(int[] answers) {
int[] answer = new int[3];
int[][] player = {{1, 2, 3, 4, 5},{2, 1, 2, 3, 2, 4, 2, 5}, {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}, {0, 0, 0}};
for(int i = 0; i < answers.length; i++) {
if(answers[i] == player[0][i%5]) {
player[3][0]++;
}
if(answers[i] == player[1][i%8]) {
player[3][1]++;
}
if(answers[i] == player[2][i%10]) {
player[3][2]++;
}
}
// 1번이 2번보다 큰 경우
if(player[3][0] > player[3][1]) {
// 1번만 제일 클 경우
if(player[3][0] > player[3][2]) {
answer[0] = 1;
} else if(player[3][0] == player[3][2]) { // 1번과 3번이 제일 클 경우
answer[0] = 1;
answer[1] = 3;
} else { // 3번이 제일 클 경우
answer[0] = 3;
}
} else if(player[3][0] == player[3][1]) { // 1번과 2번이 같은 경우
if(player[3][0] > player[3][2]) { // 1,2 번이 제일 큼
answer[0] = 1;
answer[1] = 2;
} else if(player[3][0] == player[3][2]) { // 1, 2, 3 번이 모두 같은 경우
answer[0] = 1;
answer[1] = 2;
answer[2] = 3;
} else { // 3번이 제일 클 경우
answer[0] = 3;
}
} else {
if(player[3][1] > player[3][2]) {
answer[0] = 2;
} else if(player[3][1] == player[3][2]) {
answer[0] = 2;
answer[1] = 3;
} else {
answer[0] = 3;
}
}
int length = 0;;
for(int i = 0; i <answer.length; i++) {
if(answer[i] == 0) {
if(i == 0) {
length = 3;
} else {
length = i;
}
System.out.println("0이 반환 : " + length);
break;
} else {
length = answer.length;
}
}
return Arrays.copyOfRange(answer, 0, length);
}
}
참고할 코드 : Math.max를 활용하고 ArrayList에 추가하였다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스-level1-나누어 떨어지는 숫자 배열 (0) | 2019.11.04 |
---|---|
프로그래머스-level1-소수 찾기(에라토스테네스의 체) (0) | 2019.11.04 |
프로그래머스-level1-시저 암호 (0) | 2019.11.01 |
프로그래머스-level1-수박수박수박수박수? (0) | 2019.11.01 |
프로그래머스-level1-문자열 압축 (0) | 2019.11.01 |