28682번 재우야 임관하자 | 뭐라도 하겠지

28682번 재우야 임관하자

이왜틀?


img01

28682번 재우야 임관하자 - 백준

1년 전?
내가 1년 전에 이런 걸 했다고????
하라는 대로 단순 구현하는 문제인데 어디가 잘못되었지??

try(BufferedReader br = new BufferedReader( new InputStreamReader( System.in)); 
	BufferedWriter bw = new BufferedWriter( new OutputStreamWriter( System.out))){
	StringBuilder sb=new StringBuilder();
	int n=Integer.parseInt(br.readLine());
	for(int i=0;i<n;i++) {
		if(i!=0) sb.append(" ");
		sb.append("swimming");
	}
	bw.write(sb.toString());
	bw.flush();
	sb.setLength(0);
	StringTokenizer st=new StringTokenizer(br.readLine()," ");
	for(int i=0;i<n;i++){
		if(i!=0) sb.append(" ");
		String s=st.nextToken();
		if(s.equals("bowling")) sb.append("soccer");
		else sb.append("bowling");
	}
	bw.write(sb.toString());
	bw.flush();
}catch(Exception e) {e.printStackTrace();}

????
하라는 대로 안한거 아닌가 이거???
왜 시키는 대로 하지 않는거지?

설계


몬티홀 문제
대충 정리하면 바꾸는게 이득이라는 뜻이다.
온갖 매체를 통해 소개된 유명한 문제이다.

여기서는 swimming, bowling, soccer 3가지가 있다.
간단하게 처음에 swimming을 출력하고
그다음 입력이 bowling으로 들어오면 soccer, 아니면 bowling을 출력한다.

문제에서 매 출력마다 flush를 요구하니 잘 해주도록 하자.

구현


Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();

// 1. swimming 출력
// 문제에서 n은 1500이라 명시됨
sc.nextLine();

sb.append("swimming");
for (int i = 0 ; i < 1500 ; i++) sb.append(" swimming");

System.out.print(sb.toString());
System.out.flush();

// 2. 입력에 따라 bowling 또는 soccer 출력
StringTokenizer st = new StringTokenizer(sc.nextLine(), " ");
sb = new StringBuilder();

while (st.hasMoreTokens()) {
	if (st.nextToken().charAt(0) == 's') sb.append("bowling ");
	else sb.append("soccer ");
}

System.out.print(sb.substring(0, sb.length()-1).toString());
System.out.flush();

sc.close();

채점


img02

반성


img03

아니 뭐야 왜케 많이 틀렸어!!!
나 오늘 로또 사러 가?!?!?!?!

사실 print 안하고 println 해서 다틀렸다.
세상에서 제일 재수없는 사람인줄 알았네

코드 확인


Link to GitHub

Updated: