백준 9517

hong030·2023년 1월 30일
0
  • solved.ac 기준 브론즈 3단계 문제

풀이)

  • 풀이1:
    각 문제에 대해 걸린 시간과 T/N/Z를 저장하기 위한 2차원 배열을 생성하고, for문을 통해 걸린 시간이 210초를 초과하면 break, player의 번호를 출력하게 코드를 짰다.
    만약 210초를 초과하지 않았다면 player++을 통해 다음 플레이어로 순번이 넘어가게 했다.

그러나 이 방법은 2차원 배열을 쓴다는 점에서 런타임이 길어진다.

  • 풀이2:
    문제를 해결하기 위해 배열로 모든 입력을 저장하지 않고, 입력 받는 그때그때마다 time을 계산하기로 한다. 질문을 n번 받는 동안 시간을 계산하고 timeout이 되면 break로 for문을 나와 현 player을 출력한다.

내 코드)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
	public static void main(String[]args) throws IOException {
	
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int first = Integer.parseInt(bf.readLine());
		int question = Integer.parseInt(bf.readLine());
		int timeout = 210;
		
		String[][] input = new String[question][2];
		for(int i = 0; i<question;i++) {
			input[i] = bf.readLine().split(" ");
		}
		
		for(int i =0;i<question;i++) {
			if(Integer.parseInt(input[i][0]) <timeout) {
				timeout -= Integer.parseInt(input[i][0]);
				if(input[i][1].equals("T")) {
					first ++;
					if(first > 8) first -= 8;
				}else {
					continue;
				}
			}else {
				System.out.println(first);
				break;
			}
		}
		
	}
}

다른 풀이)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int K = Integer.parseInt(br.readLine());
		int N = Integer.parseInt(br.readLine());
		//지나간 시간을 저장 할 변수
		int time = 0;
		
		for(int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int T = Integer.parseInt(st.nextToken());
			String Z = st.nextToken();
			
			time += T;
			
			if(time > 210) break;
			
			if(Z.equals("T")) K++;
			
			if(K == 9) K = 1;
		}
		System.out.print(K);
	}

}
profile
자바 주력, 프론트 공부 중인 초보 개발자. / https://github.com/hongjaewonP

0개의 댓글