[Java] Summer/Winter Coding(~2018) - 숫자 게임 (Lv 3)
https://school.programmers.co.kr/learn/courses/30/lessons/12987
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✔ 입출력 예시
1️⃣ 첫번째 시도
❓ 풀이 방법
1️⃣ A와 B 배열을 모두 정렬
👉 Int형 배열 타입을 내림차순으로 정렬하기 위해서는 Integer 타입으로 바꿔서 정렬해야하는 과정을 거쳐야 하므로 그냥 오름차순으로 정렬
2️⃣ A와 B를 2중 for문으로 순회하면서 A의 수보다 B가 더 클때에만 answer++ & B순회 break
✔ 소스코드
package lv3;
import java.util.Arrays;
public class Solution { // 숫자 게임
private int solution(int[] A, int[] B) {
int answer = 0;
Arrays.sort(A);
Arrays.sort(B);
for (int i = A.length-1; i >= 0; i--) {
for (int j = B.length-1; j >= 0; j--) {
if(A[i] < B[j]) {
answer++;
A[i] = -1;
B[j] = -1;
break;
}
}
}
return answer;
}
public static void main(String[] args) {
Solution main = new Solution();
int[] A = {5, 1, 3, 7};
int[] B = {2, 2, 6, 8};
System.out.println(main.solution(A, B));
}
}
❗ 실행 결과
👉 정확도 테스트는 모두 통과했으나, 효율성 테스트 통과 ❌
이렇게 한번에 풀린다면 Lv3 일리가 없지...🤦♀️ 다시 도전🔥
2️⃣ 두번째 시도
❓ 풀이 방법
1️⃣ A와 B 배열을 모두 정렬
👉 Int형 배열 타입을 내림차순으로 정렬하기 위해서는 Integer 타입으로 바꿔서 정렬해야하는 과정을 거쳐야 하므로 그냥 오름차순으로 정렬
2️⃣ A와 B를 2중 for문으로 순회하면서 A의 수보다 B가 더 클때에만 answer++ & B순회 break
👉 단, B를 순회할 때 이전에 이미 게임을 위해 사용된 카드들은 살펴보지 않기 위해 idx변수부터 탐색
✔ 소스 코드
package lv3;
import java.util.Arrays;
public class Solution { // 숫자 게임
public int solution(int[] A, int[] B) {
int answer = 0;
Arrays.sort(A);
Arrays.sort(B);
int idx = B.length-1;
for (int i = A.length-1; i >= 0; i--) {
for (int j = idx; j >= 0; j--) {
if(A[i] < B[j]) {
answer++;
A[i] = -1;
B[j] = -1;
idx = j-1;
break;
}
}
}
return answer;
public static void main(String[] args) {
Solution main = new Solution();
int[] A = {5, 1, 3, 7};
int[] B = {2, 2, 6, 8};
System.out.println(main.solution(A, B));
}
}
❗ 실행 결과
👉 정확성 테스트와 효율성 테스트 모두 통과 ⭕