Lv. 1 모의고사 - 성공(오래걸림)
복습할 내용 : Collections.sort() 오름차순 정렬
https://programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
import java.util.*;
import java.io.*;
class Solution {
static int[] result;
static StringBuilder sb = new StringBuilder();
//first
static int[] firstPick = {1,2,3,4,5};
static int[] secondPick = {2,1,2,3,2,4,2,5};
static int[] thirdPick = {3,3,1,1,2,2,4,4,5,5};
//점수
static int firstPoint = 0;
static int secondPoint = 0;
static int thirdPoint = 0;
static int point = 0;
static void pro(int[] answer){
//각각 답의 길이
int sizeFirst = firstPick.length;
int sizeSecond = secondPick.length;
int sizeThird = thirdPick.length;
//정답 길이
int sizeAnswer = answer.length;
int index = 0;
for(int check : answer){
//첫번째 답 비교=
Solution.rec_func(check, firstPick[index % 5]);
//다음 인덱스가 초기화 필요할 때 초기화
index = index+1;
}
//설정초기화
index = 0;
firstPoint = point;
point = 0;
for(int check : answer){
Solution.rec_func(check, secondPick[index % 8]);
index = index+1;
}
index = 0;
secondPoint = point;
point = 0;
//세번째 채점.
for(int check : answer){
Solution.rec_func(check, thirdPick[index % 10]);
index = index+1;
}
index = 0;
thirdPoint = point;
}
static void rec_func(int answer, int pick){
if(answer == pick){ //답이 일치한다면 포인트 증가. 단 나중에 초기화 필요
point++;
}else{
return;
}
}
public int[] solution(int[] answers) {
Solution.pro(answers);
int[] eachPoint = {firstPoint, secondPoint, thirdPoint};
ArrayList<Integer> ans = new ArrayList<Integer>();
int best = 0;
//best 점수 찾기.
for(int i = 0; i < 3 ; i++){
if(best <= eachPoint[i]){
best = eachPoint[i];
}
}
//각 점수를 최고점수와 비교
//최고 점수를 가지고 있다면 등번호를 추가.
for(int i = 0 ; i < 3; i++){
if(eachPoint[i] == best){
ans.add(i+1);
}
}
//[0,0,3] 일때
//Collections.sort(ans);
//오름차
int[] gogo = new int[ans.size()];
int b = 0;
for(int i = 0; i < ans.size(); i++){
gogo[i] = ans.get(i);
b++;
}
return gogo;
}
}
참고한 풀이
class Solution {
public static int[] solution(int[] answers) {
int[] answer;
int[] a = new int[]{1,2,3,4,5};
int[] b = new int[]{2,1,2,3,2,4,2,5};
int[] c = new int[]{3,3,1,1,2,2,4,4,5,5};
int[] score = new int[3];
// score[]에 수포자별 맞힌 갯수
for(int i=0; i<answers.length; i++){
if(answers[i] == a[i%5]) score[0]++;
if(answers[i] == b[i%8]) score[1]++;
if(answers[i] == c[i%10]) score[2]++;
}
// 가장 높은 점수
int max = 0;
for(int i=0; i<3; i++){
if(score[i] > max){ max = score[i]; }
}
// 가장 높은 점수를 받은 사람 수
int maxCount = 0;
for(int i=0; i<3; i++){
if(score[i] == max){ maxCount++; }
}
answer = new int[maxCount];
int idx = 0;
for(int i=0; i<3; i++){
if(score[i] == max) answer[idx++] = i+1;
}
return answer;
}
}
Lv. 1 폰켓몬 - 성공
복습할 내용 : contains()
import java.io.*;
import java.util.*;
class Solution {
//종류 수 > N/2 인 상황이라면 N/2가 출력
//종류 수 < N/2 인 상황이라면 종류 수가 출력
public int solution(int[] nums) {
//종류의 수를 체크해야함.
int numberOfMonster = 0;
ArrayList<Integer> arr = new ArrayList<Integer>();
for(int a : nums){
boolean isContain = arr.contains(a);
if(!isContain){ //가지고 있지 않다면 추가.
arr.add(a);
}
}
numberOfMonster = arr.size();
int pocketNumber = (nums.length)/2;
int answer = 0;
if(numberOfMonster >= pocketNumber){
answer = pocketNumber;
}else {
answer = numberOfMonster;
}
return answer;
}
}
https://jeleedev.tistory.com/30
[프로그래머스] [Level1] 모의고사 - Java
💁♀️ 링크 programmers.co.kr/learn/courses/30/lessons/42840 📃 문제 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포..
jeleedev.tistory.com
Lv. 1 약수의 개수와 덧셈 - 성공
복습할 내용 :약수 찾기 실수 주의
import java.io.*;
import java.util.*;
//약수가 짝수개 -> 더하기
//약수가 홀수개 -> 빼기
//해당 숫자의 약수개수 구하기 함수 필요.
// 왼쪽과 오른쪽 사이 숫자들을 배열안에 넣기 필요.
class Solution {
static int count = 0;
public int solution(int left, int right) {
// 왼쪽과 오른쪽 사이 숫자들을 배열안에 넣기
int[] array = new int[right - left + 1];
for(int i = 0; i < right - left + 1 ; i++ ){
array[i] = left + i;
}
for(int nums : array){
//해당 숫자의 약수개수 구하기
count = count + howMuch(nums);
}
int answer = count;
return answer;
}
//약수 개수 찾아서 더하던지 말던지
public static int howMuch(int num){
int initNumber = num;
int yacksuCount = 0;
int i = 1;
if(num == 1){
return -initNumber;
}
while(num > 1 && num >= i){
if(num % i == 0){//나누어진다면 약수 개수 추가.
//num = num/i; 이거 실수.
yacksuCount++;
}
i++;
}
if(yacksuCount % 2 == 0){ //약수가 짝수라면
return initNumber;
}else{
//홀수라면
return -initNumber;
}
}
}
Lv. 1 3진법 뒤집기-실패
https://programmers.co.kr/learn/courses/30/lessons/68935
코딩테스트 연습 - 3진법 뒤집기
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수
programmers.co.kr
복습할 내용 :
- 3진법 만들기 복습
- NumberFormatException : Integer.parseInt(str) 사용시 주의
'알고리즘' 카테고리의 다른 글
[Algorithm] 5월29일 알고리즘 연습 (0) | 2022.05.29 |
---|---|
[Algorithm] 5월 26일 알고리즘 연습 (0) | 2022.05.26 |
[Algorithm] 5월 23일 알고리즘 연습 (0) | 2022.05.23 |
[Algorithm] 5월 20일 알고리즘 연습 (0) | 2022.05.20 |
[알고리즘] 5월 19일 알고리즘 연습(2문제) (0) | 2022.05.20 |
댓글