우당탕탕 개발일지
[SWEA] 6190. 정곤이의 단조 증가하는 수(Java, D3) 본문
반응형
문제
주어진 숫자에서 2개를 골라 곱한다
곱한 값 중 단조인 것 중에 가장 큰 값을 구하여라.
입출력 예
풀이
( 처음에는 문제를 잘못 읽어서 주어진 문자 중에 단조를 찾는줄 알았다... ㅋㅋㅋ )
[ 과정 ]
우선순위 큐 : 내림차순 정렬
1. 두 수의 곱
2. 해당 곱이 단조인지 판별
- 단조의 경우 우선순위 큐에 저장
- 그렇지 않을 경우 작업하지 않음
3. 결과 값 출력
- 우선순위 큐 중 최댓값 출력
- 우선순위 큐가 비어있을 경우, -1 반환
while문에서는 과정 1,2번에 해당한다.
과정 1
2 4 7 10이 주어졌다고 가정하겠다.
checkNum에는 2 * 4, 2* 7, 2* 10 순서로 담기게 된다.
이렇게 모든 경우의 곱을 확인한다.
과정 2
과정 1에서 곱한 값 cheackNum이 단조인지 판별한다.
앞의 숫자가 클 경우 단조가 아닌 것으로 판단한다.
boole형태의 isDanjo 변수를 사용하여 단조인지 판별한다.
* 단조일 경우 isDanjo = true
단조일 경우 우선순위 큐에 저장
과정 3
우선순위 큐가 비어있지 않을 경우, 단조가 존재한다고 판단한다.
따라서 첫번째 요소를 가져와 출력한다.
우선순위 큐가 비어있을 경우, -1을 출력한다.
코드
Scanner sc = new Scanner(System.in);
int t=sc.nextInt();
for(int tc =1; tc<1+t; tc++) {
PriorityQueue<Integer> pqNum = new PriorityQueue<>((o1, o2) -> o2-o1);
int result = 0;
int n = sc.nextInt(); // 테스트 케이스 번호
int[] arr = new int[n];
// 입력값 저장
for(int i=0; i<n; i++) {
arr[i] = sc.nextInt();
}
int i = 0;
while(i < n) {
int nowNum = arr[i];
i++;
for(int a=i; a<n; a++) {
boolean isDanjo = true;
int checkNum = nowNum * arr[a];
char[] charNum = (checkNum+"").toCharArray();
for(int j=0; j<charNum.length-1; j++) {
if(charNum[j] > charNum[j+1]) {
// 단조 아님
isDanjo = false;
break;
}
}
// 단조 맞을때만 곱 저장
if(isDanjo) pqNum.add(checkNum);
}
}
if(!pqNum.isEmpty())result = pqNum.peek();
else result = -1;
System.out.println("#"+tc+ " " + result );
}
SWEA 문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWcPjEuKAFgDFAU4
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
반응형
'코테 > SW Expert Academy' 카테고리의 다른 글
[SWEA] 13732. 정사각형 판정(Java, D3) (0) | 2024.05.21 |
---|---|
[SWEA] 1209. [S/W 문제해결 기본] 2일차 - Sum(Java, D3) (0) | 2024.05.17 |
[SWEA] 2805. 농작물 수확하기(Java, D3) (0) | 2024.05.17 |
[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten(Java, D3) (0) | 2024.05.17 |
[SWEA] 1206. [S/W 문제해결 기본] 1일차 - View(Java, D3) (0) | 2024.05.17 |