본문 바로가기

알고리즘/c

백준 2884번 - 상근이 지각 해결 문제

안녕하세요!

2884번의 핵심은 조건문을 통한 흐름의 분기입니다.

제가 알고리즘 문제를 풀기 시작한지 얼마 되지 않아, 틀리면서 배운다는게 무엇인지 과하게 느끼고 있습니다,,

 

이 문제를 저와 비슷한 방식으로 풀다가 막힌 분들을 위해 자세히 글을 써둡니다.

(==if문이 중복 적용됨을 간과)

 

 

 

문제

 

 

문제를 간단하게 요약해보면, 24시간 표현으로 입력한 시간에서 45분 앞서는 시간으로 바꿔달라는 것이죠

 

 

 

빠른 정답 코드

(찾아보니 다른 분들의 더 좋은 코드도 많지만, 제 방식을 기록하려 합니다!)

 

 

 

(h는 시간, m은 분을 의미..다음부턴 코드에 주석으로 달아야겠습니다)

 

첫번째 문제는 if문의 실행 순서를 고려하지 않아서 발생했습니다.

만약 h에 1이 입력된다면, m>=45일땐 괜찮지만

h == 1, m<45라면 h=h-1이 되면서 아래 if(h==0 && ~~)일때의 if문에 다시 적용됩니다.

 

즉 if문은 조건에 해당된다면 실행되기 때문에, 우선적으로 실행된 조건문이 적용된 후의 값이 다른 if문에 적용되는지 신경 써줘야 한다는 것을 알았습니다.

 

글을 쓰면서 다시 보니 정말 바보같은 코드네요ㅎㅎ..

예를 들어 h:1, m:46을 입력했을때

1시 1분이 나와야하는데, if문이 중복되어 이상한 값이 출력되는 것을 확인했습니다.

 

 

 

 

그래서 if문이 중복 적용되지 않도록 if, else if문을 사용했습니다.

 

else if문을 사용하는 이유는 조건이 여러개일때, 중복되지 않도록 코드의 흐름을 나누기 위해서입니다.

사실 위 코드 23행처럼 else if(h>0 && m<45)로 마지막 조건까지 명시할 필요 없이 else로 마무리 해주는 것이 더 깔끔합니다.

 

이렇게요!

그러면 결과가 이렇게 깔끔하게 나옵니다.

 

 

블로그 포스팅이 처음이라, 부족한 부분이 많지만 다음 글부터는 더 깔끔하게 쓰겠습니다!

 

 

'알고리즘 > c' 카테고리의 다른 글

컴퓨터와 가위바위보 게임하기  (0) 2021.05.03
백준 2739번-구구단  (0) 2021.03.29