나 개발자 진짜 되냐?

코딩테스트 연습 - 기능 개발 ( ceil , 나눗셈 ) 본문

프로그래머스를 풀어보아요!/C++

코딩테스트 연습 - 기능 개발 ( ceil , 나눗셈 )

Snow Rabbit 2026. 5. 28. 03:48

 

오늘은 28일!

5월 연휴 언제 오나..

한창 4월에 흐흐히히 기다렸는데..

벌써 5월 말이다..

 

뭔가 머릿속이 엄청 복잡하다.

공부를 해도 공부가 머리에 안 들어오는 느낌..

..

복잡하다.

그래서 뭐든 하나도 집중이 안되어서..

걱정이 많은 하루

 


 

 

 

예시를 들으니 이해가 갔다.

 

근데 이걸 도대체 스택이랑 큐를 통해서 어떻게 푸는 거지..?

 

인지 씨는 실버 3 - 4문제라고 했다.

못 푸는 거 보니..

..

나는 아직 그만한 실력이 아닌가 보다.

 

여하튼..

인지 씨 말로는

 

일단 프로그래머스에서 일을 하는데 얼마나 걸리는지 각각 구해보라고 했다.

 

93 30 55

7일 3일 9일

 

이렇게 말이다.

 

그 식은

 

두 가지로 구할 수 있다.

 

ceil

올림이다.

숫자를 무조건 올려주는 친구이다.

 

#include <cmath>

필요!!

 

대신 이 친구는 소수점을 알아야 하기 때문에

계산 식에 앞에 double를 써줘야 한다.

이미 double면 말고

 

그래서

  int ans = ceil((double)(100 - progresses [i]) / speeds [i]);

 

이렇게 써야 한다.

 

자 다음으로

7 3 9인데

3은 7이 끝나기 전에 못 끝난다고 한다.

그래서 7일이 되어야 3이 끝나서

7일에 두 개가 끝나는 셈이 된다.

그리고 9 한 개

그래서 2 1 이 출력되는데..

 

 

내 마음대로 한번 짜봤다.

 

근데.. 음..

다 틀렸다..

 

코드의 문제점에 대해 많이도.. 말해줬다.

 

 

 

1. 예외

7 3 4 면?

사실 이건 7일이면 끝나야 해서 답이 1이 나와야 하는데

이렇게 되면 3과 4를 비교하게 되어..

1 1 이 된다는 것..

그럼 곤란하지..

그래서 max를 찾아야 한다고 한다.

 

2. 범위

왜 <= 응한 거냐??

왜냐면.. i < size 하니까 맨 끝이 안 나오길래..

 

for문이 완전히 끝나도 sum이 pb이 안되는 것..

왜냐면 우리가 sum을 push_back 해주고 다시 sum을 1로 바꾸기 때문에

결국 sum이 남는다.

그래서 마지막줄에 결국 또 push_back 해줘야 한다고..

 

 

max는 처음 친구로 설정해 두면? 편하다.

 

이렇게 해주면 된다!

 

전체 코드도!

 


 

중요한 건 이제부터!

ceil이 기억이 안 날 경우도 있고

아까 나누다 보면..

7/3 은 2.3333이라 2가 나오는데

사실 우린 3이 필요했다.

왜냐면 한 개라도 있으면 하루를 해야 하니까!

 

그래서 그 버림 성질을 역이용한 수학적 트릭이 있다고 한다.

 

( A + B -1 ) / B이다.

 

예전에 그 사과 달팽이..

그거 비슷한 거 같은데

 

예를 들면 A 70이고 B가 30이라고 치자.

원래식은 A / B라서.

2.3333... 근데 int는 버리니까 답이 2가 나온다.

하지만 우린 3이 나와야 한다.

30 30 하면 10이 남기 때문..!

 

그래서 B를 더해주고 -1을 해주는 것이다.

 

그러면 99 / 30 이여서

답이 3이 된다.

나머지 한 개라도 소중하게 필요할 때 쓰는 치트키 라고한다.

 

소수점 함수가 기억 안 날 때 써보자

 

근데 나는 ceil이 더 금방.. 생각날 거 같기도 하다..ㅎ

 

 

 

쉽지 않은 문제를 새벽에 풀었다.

 

고생했다.