728x90
반응형
2024.07.11기준 - 브론즈2
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 주어진 두 수가 있을때 일정하게 커지면 두 수가 같아질 수 있는지 확인하는 문제입니다.
이 문제 접근은
1. 1분마다 동일하게 딸기와 샤인머스캣을 꽂기 때문에 꽂는 개수에 따라 조건식이 들어간다고 생각했습니다.
반복문을 돌려 조건이 만족하는지 확인을 하는데 반복문을 언제 끝내야 할지 고민을 했습니다.
1분 동안 더 많이 꽂는 과일이 더 크면 같아 질 수 없다는 걸 발견했습니다.
// 1분 동안 더 많이 꽂는 과일이 더 크면 같아 질 수 없다.
while (p > q ? s < m : s > m) {
num++;
s += p;
m += q;
if (s == m) {
result = true;
break;
}
}
2. 1분 동안 꽂는 과일의 양이 같거나 처음 부터 딸기와 샤인머스캣이 동일하다면.
과일의 개수를 동일하게 만들 수 있는지 확인하는 함수에서 먼저
1분 동안 꽂는 과일이 같다면 처음 부터 값이 같지 않는 이상 똑같아 질 수 없기 때문에 딸기의 개수 == 샤인머스캣개수를 리턴했습니다.
또는 처음부터 같다면 동일하게 리턴을 해줍니다.
private static boolean check(int s, int m, int index) {
boolean result = false;
if (p == q || s == m) { // 1분 동안 꽂는 과일이 같으면 s == m일 때에만 가능하기 때문에.
return s == m;
}
int num = 0;
// 1분 동안 더 많이 꽂는 과일이 더 크면 같아 질 수 없다.
while (p > q ? s < m : s > m) {
num++;
s += p;
m += q;
if (s == m) {
result = true;
break;
}
}
count[index] = num; // 몇 분이 지났는지 저장
return result;
}
코드
package Main;
import java.io.*;
import java.util.*;
public class Main {
static int p, q;
static int[] count;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 탕후루 꼬치의 수
p = Integer.parseInt(st.nextToken()); // 1분마다 꽂는 딸기의 수
q = Integer.parseInt(st.nextToken()); // 1분마다 꽂는 샤인머인캣의 수
count = new int[n];
int[] strawberry = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
strawberry[i] = Integer.parseInt(st.nextToken());
}
int[] muscat = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
muscat[i] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < n; i++) {
if (!check(strawberry[i], muscat[i], i)) { // 과일이 같아질 수 없다면 NO 출력
sb.append("NO");
break;
}
}
if (sb.length() == 0) { // 과일이 같아질 수 있다면
sb.append("YES\n");
for (int i = 0; i < n; i++) {
sb.append(count[i]).append(" ");
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
private static boolean check(int s, int m, int index) {
boolean result = false;
if (p == q || s == m) { // 1분 동안 꽂는 과일이 같으면 s == m일 때에만 가능하기 때문에.
return s == m;
}
int num = 0;
// 1분 동안 더 많이 꽂는 과일이 더 크면 같아 질 수 없다.
while (p > q ? s < m : s > m) {
num++;
s += p;
m += q;
if (s == m) {
result = true;
break;
}
}
count[index] = num; // 몇 분이 지났는지 저장
return result;
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 31994번 강당 대관 (2) | 2024.07.12 |
---|---|
BAEKJOON / 백준 - JAVA 21964번 선린인터넷고등학교 교가 (0) | 2024.07.12 |
BEAKJOON / 백준 - JAVA 25175번 두~~부 두부 두부 (0) | 2024.07.11 |
BAEKJOON / 백준 - JAVA 31922번 이 대회는 이제 제 겁니다 (0) | 2024.07.10 |
BEAKJOON / 백준 - JAVA 31429번 SUAPC 2023 Summer (0) | 2024.07.10 |