-
[코딩테스트] 프로그래머스 - 숫자 게임(Java, Level3)코딩테스트/프로그래머스 2022. 12. 3. 16:08728x90
안녕하세요~
또 오랜만에 인사드립니다.
작심삼일도 여러번하면 습관이 되길바라며..
성인이 되니 이런저런 일이 많이생기네요. 어쩌면 핑계일수도 있지만..
열심히 다시 시작해보겠습니다. 😊💪
오늘 풀어볼 문제입니다.
언제나 그렇듯 문제확인 후 코드, 그리고 제가생각한 내용 남겨드리겠습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12987
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
그리고 코드입니다.
import java.util.*; class Solution { public int solution(int[] A, int[] B) { int answer = 0; PriorityQueue<Integer> a_que=new PriorityQueue<>(Collections.reverseOrder()); PriorityQueue<Integer> b_que=new PriorityQueue<>(Collections.reverseOrder()); // 7 5 3 1 // 8 6 2 2 for(int d:A) a_que.offer(d); for(int d:B) b_que.offer(d); while(!b_que.isEmpty()) { while(!a_que.isEmpty()) { int a_data=a_que.peek(); int b_data=b_que.peek(); if(b_data>a_data) { answer++; a_que.poll(); break; } else a_que.poll(); } b_que.poll(); if(a_que.isEmpty()) break; } return answer; } }
다음은 로직설명 드리겠습니다.
저는 여기서 PriorityQueue 즉 우선순위 Queue를 사용했다는점 참고부탁드립니다.
① 먼저 A와 B 둘다 PrioirtyQueue를 통해 정렬합니다. 여기서 역순(Collections.reverseOrder())를 사용한 부분 확인 부탁드립니다.
② 다음은 이제 이 둘을 어떻게 비교할 것인가? 입니다.
- 최대한 A와 작은 격차를 가진 수로 이긴다
- 그럼에도 B는 이겨야 한다. 라는 조건을 생각하며 로직을 짰습니다.
③ 먼저 B Queue를 기준으로 가장 큰 수를 찾아 A요소를 이길때까지 Queue를 반복시킵니다.
- 만약 B Queue의 최대숫자가 A의 제일 작은수를 못이긴다면 나머지 B Queue의 요소들은 볼것도 없겠죠?
④ A보다 큰 B요소를 찾았다면 다음으로 대결할 큰숫자를 A, B Queue에서 각각 뽑습니다.
이런생각을 갖고 풀었습니다.
도움이 되셨다면 좋겠네요! :D
해당문제는 여기까지 하겠습니다. 다행인지 은근 쉽게 풀렸네요!
날씨가 갑자기 추워졌습니다. 모두 감기조심하시기 바랍니다.
캄사합니다. :D
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[코딩테스트] 프로그래머스 - 기지국 설치(Java, Level3) (0) 2022.12.05 [코딩테스트] 프로그래머스 - 소수 찾기(Java, Level2) (0) 2022.12.03 [코딩테스트] 프로그래머스 - 할인 행사(Java, Level2) (0) 2022.11.22 [코딩테스트] 프로그래머스 - 베스트앨범(Java, Level3) (0) 2022.11.19 [코딩테스트] 프로그래머스 - 조건별로 분류하여 주문상태 출력하기(MySQL, Level3) (0) 2022.11.19