문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/120880
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
▼ ▼ ▼
정답 풀이로 바로 가기
▲ ▲ ▲
내 풀이 (오답)
로직
- numlist에 있는 모든 원소들을 순회하는 for문
- Integer를 원소로 갖는 ArrayList 객체
answer
에 원소를 하나씩 추가한다.- 이 때, answer 내의 원소들을
numlist[i]
와 비교한다. answer.get(j)
와n
의 차이보다numlist[i]
와n
의 차이가 더 크면- j 위치에
numlist[i]
를 add한다. - answer 순회를
break;
한다.
- j 위치에
answer.get(j)
와n
의 차이와numlist[i]
와n
의 차이가 같고 (and)answer.get(j)
보다numlist[i]
가 더 크면- j 위치에
numlist[i]
를 add한다. - answer 순회를
break;
한다.
- j 위치에
- 이 때, answer 내의 원소들을
코드
import java.util.*;
class Solution {
public int[] solution(int[] numlist, int n) {
List<Integer> answer = new ArrayList<>();
for(int i=0; i<numlist.length; i++) {
if(i==0) {
answer.add(numlist[i]);
continue;
}
for(int j=0; j<answer.size(); j++) {
if(Math.abs(answer.get(j)-n) > Math.abs(numlist[i]-n)) {
answer.add(j, numlist[i]);
break;
} else if (Math.abs(answer.get(j)-n) == Math.abs(numlist[i]-n)
&& answer.get(j) < numlist[i]) {
answer.add(j, numlist[i]);
break;
}
}
}
return answer.stream().mapToInt(i->i).toArray();
}
}
채점 결과
정확성 테스트
테스트 1 〉 실패 (2.77ms, 70.1MB)
테스트 2 〉 실패 (2.94ms, 77.4MB)
테스트 3 〉 실패 (2.64ms, 73.6MB)
테스트 4 〉 실패 (2.00ms, 77.8MB)
테스트 5 〉 통과 (1.73ms, 76.5MB)
테스트 6 〉 통과 (2.54ms, 74.3MB)
테스트 7 〉 통과 (1.81ms, 76.5MB)
채점 결과
정확성: 42.9
합계: 42.9 / 100.0
내 풀이 (정답)
로직
numlist(int[]) = [1, 2, 3, 4, 5]
n(int) = 1
이라는 테스트 케이스를 추가하자,
1 이외의 다른 원소들이 list에 추가되지 않는 것을 알아냈다.
비교작업 후에도 list에 add되지 않은 원소들은
마지막에 add될 수 있도록 작업이 필요하다.
- numlist에 있는 모든 원소들을 순회하는 for문
- Integer를 원소로 갖는 ArrayList 객체
answer
에 원소를 하나씩 추가한다.- 이 때, answer 내의 원소들을
numlist[i]
와 비교한다. answer.get(j)
와n
의 차이보다numlist[i]
와n
의 차이가 더 크면- j 위치에
numlist[i]
를 add한다. - answer 순회를
break;
한다.
- j 위치에
answer.get(j)
와n
의 차이와numlist[i]
와n
의 차이가 같고 (and)answer.get(j)
보다numlist[i]
가 더 크면- j 위치에
numlist[i]
를 add한다. - answer 순회를
break;
한다.
- j 위치에
- 이 때, answer 내의 원소들을
- 만약 위 순회문을 돌고났는데도
answer
안에numlist[i]
가 없으면,numlist[i]
를 추가해준다.
코드
import java.util.*;
class Solution {
public int[] solution(int[] numlist, int n) {
List<Integer> answer = new ArrayList<>();
for(int i=0; i<numlist.length; i++) {
if(i==0) {
answer.add(numlist[i]);
continue;
}
for(int j=0; j<answer.size(); j++) {
if(Math.abs(answer.get(j)-n) > Math.abs(numlist[i]-n)) {
answer.add(j, numlist[i]);
break;
} else if (Math.abs(answer.get(j)-n) == Math.abs(numlist[i]-n)
&& answer.get(j) < numlist[i]) {
answer.add(j, numlist[i]);
break;
}
}
if(answer.indexOf(numlist[i])==-1) answer.add(numlist[i]);
}
return answer.stream().mapToInt(i->i).toArray();
}
}
채점 결과
정확성 테스트
테스트 1 〉 통과 (3.47ms, 75.5MB)
테스트 2 〉 통과 (3.40ms, 76.6MB)
테스트 3 〉 통과 (2.78ms, 75.4MB)
테스트 4 〉 통과 (3.11ms, 73.6MB)
테스트 5 〉 통과 (1.86ms, 71.2MB)
테스트 6 〉 통과 (1.97ms, 72.3MB)
테스트 7 〉 통과 (2.27ms, 73.1MB)
채점 결과
정확성: 100.0
합계: 100.0 / 100.0
'코딩테스트 - 프로그래머스 > JAVA' 카테고리의 다른 글
[프로그래머스 / 코딩테스트 입문 / 자바(JAVA)] 이진수 더하기 (0) | 2024.03.07 |
---|---|
[프로그래머스 / 코딩테스트 입문 / 자바(JAVA)] 등수 매기기 (0) | 2024.03.06 |
[프로그래머스 / 코딩테스트 입문 / 자바(JAVA)] 평행 (0) | 2024.03.05 |
[프로그래머스 / 코딩테스트 입문 / 자바(JAVA) ] 저주의 숫자 3 (0) | 2024.03.05 |
[프로그래머스 / 코딩테스트 입문 / 자바(JAVA)] 안전지대 (0) | 2024.03.05 |