블램의 일상 IT카페

[C]백준 2525번 [오븐시계] - 풀이 본문

IT/알고리즘 문제 풀이

[C]백준 2525번 [오븐시계] - 풀이

ble_ram 2022. 11. 22. 19:54

문제.


 

 

 

내가 틀린 이유.


이 문제 이전 알람시계 문제와 비슷한 문제라고 생각해서 너무 수식에 집착한거 같다.

 

우선 1. 시, 분 이 두개에 대한 강박이 있었다.

            그래서 기존 조건문을 여러개 늘려 경우의 수를 대입하다보니 너무 코드가 길어졌고

            분명 이정도의 난이도 문제가 아닌데... 하면서 의아해했다.

 

2. 초,중때 배운 간단한 방법을 이용하여 풀면 됐다.

대충 정 안풀려서 평소 즐겨찾던 블로그에 들려서 힌트를 얻었다.

 

내가 정 안풀릴땐 https://st-lab.tistory.com/293 이분 블로그에 들어가서 힌트를 얻는다.

 

제일 서론을 문제 출제자의 의도대로 해석해주셔서 어떤 방향으로 코드를 써야하는지

알려준다.

 

만약 이런 힌트하나 보지 않았다면 난 못풀지 않았을까 싶다.

 

 

 

 

 

풀이.


#include <stdio.h>
int main() {
  int H,M,bun;
  int a, b, sum, Tsum, mod;
  scanf("%d %d", &H, &M);
  scanf("%d", &bun);
  
  a = H*60 + M;
  b = bun;

  sum = a + b;
  
  Tsum = sum/60;
  mod = sum%60;

  if(Tsum>=24){Tsum = Tsum-24;}

  printf("%d %d", Tsum, mod);
  return 0;
}

풀이 : 시간을 분으로 변환(H*60) 후 + 입력한 분 + 더해야할 분 을 싹다 더해준다.

그렇게 나온 수를 60으로 나눠주면

몫이 H(시간), 나머지가 M(분)이 된다.

 

이후 바로 제출하면 틀렸다고 나오는데 아직 경우의 수가 남아있다.

23 40 + 1000 같은 걸 하면 23다음인 01234567~이 나와야하는데 23다음으로 25,27,28 이렇게 나온다.

이건 간단한 조건식 하나를 세워주면 된다.

 

 모두 더해준 값에서 몫이 24와 같거나 크면(이유는 23이 최대 수이기에 24이상이거나 같다는 것은 문제조건에 맞지않는다.) 몫값에서 24를 빼준다.

 

왜 24를 빼주냐면 23다음으로 0이 와야하는데 24가 온다면 123456이런식이 아닌 25 26 27 이런 식으로 값이 나온다.

 

사실상 0이 즉 24나 마찬가지이기에 24 다음 25시 26시 27시는 24(즉 0)을 빼주면 1, 2, 3이런 식으로 0일경우 다음 수인

1234567대로 진행이 된다. 이로인해 24를 빼주면 24이상의 시간은 나오지 않는다. 


*추가로

 

다른사람들이 푼 문제를 보면 정말 간단하고 깔끔하게 푼 사람들이 참 많다, 이외에 방법으로도 A,B,C 값으로 변수를 만들어 수식을 만들어푸는 방법.

 

내 코드와 달리 분을 시간으로 변경하여 구하는 방법 등.

 

한번씩 딴 사람들의 코드를 분석해보는 것도 좋을거 같다. 다양한 시각을 기를 수 있게해주는 것 같다.


확실한건 다른 사람들에 비해 코드가 매우 지저분하다...

하지만 그런거 신경쓰며 할 수준이 아니라 최대한 빠른 시간내에 구현해내려고 하는것을 목표로 하고있다.

 

아직까진 브1문제들은 3시간은 걸리는거 같다..(에휴 언제 나아질런지)

 


Comments