14681번은 좌표를 입력하면 해당 좌표가 어느 사분면에 위치하는지를 출력하는 문제였다. C프로그래밍 시험 공부하면서 구조체였나 함수였나 하여튼 이 문제를 풀어본 적이 있어서 수월하게 풀었다.
처음에는 조건을 x<0 && y>0 이런 식으로 하려다가 오히려 더 코드가 복잡해질 것 같아서 크게 x가 음수일 대, 양수일 때로 나누고 조건문 내부에 y 기준으로 또 조건문을 만드는 코드를 작성했다.
백준 매우 까다롭다.. 2884번 답 출력에 공백 없다고 대차게 까인 게 한 3번...
일단 문제는 45분 일찍 알람시계 맞추는 문제다. 시간 문제 정말 까다롭다고 생각했는데 메모장 켜두고 좀 끄적이면서 열심히 고민해봤더니 어떤 식으로 코드를 짜야할지가 떠올랐다.
진짜 해결책 떠오르는 순간이 제일 행복해...
24시간 단위를 사용한다니까 순간적으로 문제를 보고 겁먹을 수도 있지만 일단 차근차근 처음부터 생각해보는 게 가장 중요하다.
언어는 C++을 사용했다. 스윙 스터디하면서 열심히 공부했던 게 아쉽기도 하고, 독학용 책도 샀기 때문에 C++로 하고 있다.
일단 시 = hour, 분 = min으로 입력받고, min을 기준으로 나눴다.
min이 45보다 크면 그냥 min에서 45만 뺴주면 되고, min이 45보다 작으면 hour 부분도 바뀌기 때문에 그 부분을 잘 생각해줘야 한다.
그리고 자정은 0시이기 때문에 0시에서 한 시간 전은 23시지 않은가, 0-1을 할 수는 없으니 23-h로 23시가 되게끔 한다.
조건문 안에 hour가 0일 때와, 0이 아닐 때로 나눠서 코드를 작성해줘야 한다.
14 20 을 입력하면
13 35 가 출력되어야 한다.
처음에는 출력에 공백을 생각 못해서 한 3번 틀렸다. (바보)
그래서 " " 를 입력해서 공백을 추가해줬더니 맞았다.
2525번 : 오븐 시계
오븐에 현재 시각과 조리 시간을 입력하면 언제 조리가 끝나는지 출력해줘야 한다.
처음에 조리 시간 범위를 당연하게 0~59로 생각했다 틀렸는데, 알고보니 0~1000분이 범위였다. (문제를 잘 읽자)
이제 1000분이라는 것에 멘붕이 오기 시작했고 일단 메모장에 또 정리를 시작했다.
그리고 그렇게 저 한 부분의 실수로 1시간 동안 비명을 지르면서 코드를 짰다.
나는 정말 바보인 게 틀림없다. 세상에 왜 1000분을 나누냐 1048분을 나눠야지.... 이 바보 멍청이,,,
23시 48분에 16시간 40분을 더하면 40시 28분이 나오는데 저런 바보같은 짓을 하는 바람에 계속 39시,, 24로 나눠서 23시 48분에서 1000분 뒤는 15시 28분... 이런 짓이나 하고 있었던,,, 조건문이 잘못된 줄 알고 코드 갈아엎고 그랬는데,,, 그냥 계산을,,계산을!!!!!!!!!!!!!!!!!
<첫번쨰 코드>
#include <iostream>
using namespace std;
int main()
{
int h = 0; //현재 시
int m = 0; //현재 분
int t = 0; //조리 시간
cin >> h >> m;
cin >> t;
int hour = 0;
int min = (m + t) % 60;
if (t <= 60)
{
hour = h + (m + t) / 60;
if (hour > 23)
{
hour = hour % 24;
cout << hour << " " << min << endl;
}
else
{
cout << hour << " " << min << endl;
}
}
else if (t > 60)
{
hour = h + (m+t) / 60;
if (hour > 23)
{
hour = hour % 24;
cout << hour << " " << min << endl;
}
else
{
hour = h + (m + t) / 60;
cout << hour << " " << min << endl;
}
}
return 0;
}
첫 번째 코드는 조리 시간이 60분보다 큰 지, 작은 지로 나눴다.
<두 번째 코드>
#include <iostream>
using namespace std;
int main()
{
int h = 0;
int m = 0;
int t = 0;
cin >> h >> m;
cin >> t;
int hour = 0;
int min = (m + t);
if (min >= 60)
{
hour = h + min / 60;
min = min % 60;
if (hour > 23)
{
hour = hour % 24;
cout << hour << " " << min << endl;
}
else
{
cout << hour << " " << min << endl;
}
}
else if(min<60)
{
hour = h;
cout << hour << " " << min << endl;
}
return 0;
}
두 번째 코드는 현재 분+조리 시간이 60보다 크거나 같은지, 작은지를 기준으로 나눠서 조건문을 작성했다.
이렇게 하는 게 좀 더 코드가 간결해진다.
두 코드에 공통적으로 들어가는 부분은
이 부분. hour = h+(m+t)/60 의 값이 23보다 크면 그것을 24로 나눈 나머지가 시 자리에 들어간다.
이렇게 코드를 짜면 24시를 문제의 조건에 맞게 0시로 표현할 수 있다. 새벽 시간대도 1 2 3 4 이런 식으로 표현 가능하다.
단계별 문제 중 if 조건문을 푸는 중인데, 총 7문제 중 6문제를 풀었고 아직 한 문제가 남았지만 2525하느라 진이 다 빠져서 그건 내일 하는 걸로.. 열심히 살자.
'백준' 카테고리의 다른 글
백준 2일차 - 2840번 (0) | 2022.07.05 |
---|