문제 : boj27161
필요 알고리즘 개념
- 구현, 시뮬레이션
- 문제에 제시된 방법대로 입력값에 따라 시뮬레이션을 진행하면 된다.
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
문제에 제시된 방식대로 구현해서 시뮬레이션을 돌려주면 된다. 따라서 코드에 주석으로 설명하는게 더 나을 것 같다.
int cur = 0; // 현재 위치이다. 처음엔 어차피+1 되서 '1'이 될 테니 0으로 뒀다.
boolean isReverse = false; // false면 +1씩 이동, true면 -1씩 이동한다. 모래시계에 따라 변경된다.
while (n-->0) {
StringTokenizer st = new StringTokenizer(br.readLine());
boolean isHourGlass = st.nextToken().charAt(0) == 'H'; // 모래시계인지 여부이다.
int num = Integer.parseInt(st.nextToken()); // 입력받은 시각이다.
cur += (isReverse?-1:1); // isReverse에 변경된 위치를 구한다.
if (cur<=0) cur = 12; // cur은 1부터 12여야 하므로 조정해준다.
if (cur==13) cur = 1;
boolean clap = false; // 박수쳐야 하는지 여부 판단용
if (isHourGlass && cur != num) { // 두가지 조건이 동시 충족되지 않는지 확인한다.
isReverse = !isReverse; // isReverse를 변경
}
if (cur==num && !isHourGlass) // 두 가지 조건이 동시에 충족되지 않았을때만 박수친다.
clap = true;
sb.append(cur).append(' ').append(clap?"YES":"NO").append('\n');
}
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private void solution() throws Exception {
int n = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
int cur = 0;
boolean isReverse = false;
while (n-->0) {
StringTokenizer st = new StringTokenizer(br.readLine());
boolean isHourGlass = st.nextToken().charAt(0) == 'H';
int num = Integer.parseInt(st.nextToken());
cur += (isReverse?-1:1);
if (cur<=0) cur = 12;
if (cur==13) cur = 1;
boolean clap = false;
if (isHourGlass && cur != num) {
isReverse = !isReverse;
}
if (cur==num && !isHourGlass)
clap = true;
sb.append(cur).append(' ').append(clap?"YES":"NO").append('\n');
}
System.out.print(sb);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[쇼미더코드 3회] 백준 27210 - 신을 모시는 사당 (자바 java) (0) | 2023.01.15 |
---|---|
[자바] 백준 27162 - Yacht Dice (java) (0) | 2023.01.15 |
[자바] 백준 27160 - 할리갈리 (java) (0) | 2023.01.15 |
[자바] 백준 27159 - 노 땡스! (java) (0) | 2023.01.15 |
[자바] 백준 13699 - 점화식 (java) (0) | 2023.01.14 |
댓글