[백준] 2525번 오븐 시계

Drumj·2023년 3월 6일
0

문제


정답부터

이렇게 문제를 풀었다는 것이지 이 코드가 무조건적으로 좋다!! 라는 것은 아니니 참고만 하세용

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");

int h = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int cook = Integer.parseInt(br.readLine());
int endTime = (m + cook) % 60;
int endHour = h + ((m + cook) / 60);

if (endHour > 23) {
	endHour = endHour % 24;
	bw.write(endHour + " " + endTime);
} else {
	bw.write(endHour + " " + endTime);
}
bw.close();

조건식을 사용해서 문제를 풀었다.

먼저 h = 시간, m = 분, cook = 요리시간 으로 잡았고
endTime = 끝나는 분...? 요리 시간이 분으로 주어지기 때문에 둘을 더해서 60으로 나눈 나머지를 담았다.
-> 그러면 40+30 => 10분이 되겠지?

endHour = 끝나는 시간 -> 위와 비슷하게 이번엔 나눈 몫을 구해서 더해주었다.
그러면 50+60 => 1시간 50분 => 1시간을 endHour에 더하는 것.

이렇게 하고 if문으로 24시일때 다시 0으로 돌아오기 위해서 endHour % 24를 해주었고
else로 그렇지 않을때는 그냥 출력하게 코드를 작성했다.

이렇게만 보면 아주 간단한 문제다.


근데 왜 나는 삽질을 했나?

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");

int h = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int cook = Integer.parseInt(br.readLine());
int endTime = m + cook;
int endHour = h + (endTime / 60);

if (endTime >= 60) {
	endTime = endTime % 60;
	if (endHour > 23) {
		endHour = endHour % 24;
		bw.write(endHour + " " + endTime);
	}
	bw.write(endHour + " " + endTime);
} else {
	bw.write(endHour + " " + endTime);
}

bw.close();

일단 전체 코드작성.
출력은????

23 45
25
0 100 10

?????????? 아니 무야 왜 100????
엥??????????? 왜 3 숫자나 나와!!!!!
라고 개 빡쳐서 내가 코드를 뭘 잘못 작성했지? 했는데

if (endTime >= 60) {
	endTime = endTime % 60;
	if (endHour > 23) {
		endHour = endHour % 24;
		bw.write(endHour + " " + endTime);
	}
	bw.write(endHour + " " + endTime);
}

이 부분을 잘 살펴보면....

if (endHour > 23) {
	endHour = endHour % 24;
	bw.write(endHour + " " + endTime);
}

이렇게 bw.write() 가 한번 더 있어서
0 10 / 0 10이 붙어서 나온것... 사실 정답은 나오는데 출력을 두번해서 그런것이었음...
나는 그것도 모르고 삽질을 주구장창..... 이번것도 역시 기초가 부족해서 나온 실수였다...
if를 걸었으면 임마!! bw.write()가 중복되는디! 쓰고 나올줄 알았냐?????

해결방법

그냥 2번 if문 안에 bw.write()를 없애면 됨;;;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");

int h = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int cook = Integer.parseInt(br.readLine());
int endTime = m + cook;
int endHour = h + (endTime / 60);

if (endTime >= 60) {
	endTime = endTime % 60;
	if (endHour > 23) {
		endHour = endHour % 24;
	}
	bw.write(endHour + " " + endTime);
} else {
	bw.write(endHour + " " + endTime);
}

bw.close();

이렇게... 그냥 endHour를 수정해주기만 하고 if는 끝내면 되는 거였다... 에효.... 쫌!!!

근데 그걸 모르고 왜 안되냐고 코드만 겁나 수정했네... 아휴... 그래도 맨 위에 올린 정답코드랑 비교하면 확실히 if문을 덜 쓰게 되니 코드가 더 깔끔해 보인다.
다른 사람들의 코드를 보면 if를 쓰지 않고도 문제를 해결 하는 걸 볼 수 있다...!!

더 열심히 공부하자~~


홀뤼 쉣!!!

다 쓰고 한 번더 읽으면서 생각해보니 바로 위에 if 문을 사용하지 않고 해결하는 것까지 생각났다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");

int h = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int cook = Integer.parseInt(br.readLine());
int endTime = (m + cook) % 60;
int endHour = (h + ((m + cook) / 60)) % 24;

bw.write(endHour + " " + endTime);
bw.close();

짠!! if로 하던 %24를 그냥 바로 때려버리면 되는것..!!
누군가에겐 뭐야 당연한 소리 아냐?라고 할 수 있겠으나 나는 깜짝 놀래버려따!!! 으흐흐

그냥 걸음마떼고 있는 단계니까 태클걸지말고 보행기 한번 밀어주고 가십셔

감사합니다 땡큐.

0개의 댓글