본문 바로가기
PS/BOJ

[자바] 백준 27161 - 크레이지 타임 (java)

by Nahwasa 2023. 1. 15.

 문제 : 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();
    }
}

댓글