| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 백준
- 유니티공부
- 백준 c++ 공부
- 유니티
- c#
- C#문법
- Unity
- 바킹독
- c#코딩기초트레이닝
- c#기본문법
- unity3d게임만들기
- 백준 C++
- c++ 백준
- 백준코테
- C++
- unity게임
- c++ solved.ac
- unity3dservival
- c#기초문법
- 유니티서바이벌게임만들기
- 오블완
- 유니티게임만들기
- solved class 2
- 바킹독알고리즘
- unity게임만들기
- c#코테
- 백준 구현문제
- 리그오브레전드턴제게임
- 티스토리챌린지
- 백준코딩테스트
- Today
- Total
나 개발자 진짜 되냐?
백준 C++ 2869번 달팽이는 올라가고 싶다 ( 수학 ) 본문

그렇게 저는 어제 석화지 1편을 봤습니다.
다시 보면 또다시 보는 맛이 있는 거 아세요?
못 보던걸 다시 보고 이해하고
알던걸 보며 웃고
드라마는 복습 잘하면서
왜 코테는 복습을 잘 안 하는지....ㅋㅋㅋ긁적
근데 안 보고 싶은 게 더 많긴 해요.
새로운 걸 선호하지 않아서
아마 또 치아문을 보지 않을까.... 싶기도 하고... 모르겠어요.
일단 오늘은
달팽이는 올라가고 싶다. 입니다.
저는 행동이 느려서 달팽이, 거북이 이런 별명은
아주 익숙한데요.
제가 올라간다 생각하고 문제 한번 풀어보겠습니다 ㅎㅋ

이론상 A씩 올라가고 B씩 떨어지면..
0에서 A 더하고 B 빼주고
cnt++올려주면 될 거 같은데...

정답률이 30 퍼인 덴 이유가 있겠지..
while문이 안된다는 건가..
결국 올라가는 게 더 커서..
횟수는 10억 이하일 텐데..
흠..
아마 시간제한에 걸리나보다.

테케 답은 제대로 나오는데..
시간초과라고 뜬다..

흠.....
시간초과면 while문을 쓰면 안 되는 건데..
끼워 맞추기 공통점을 찾으려고 노력했다..ㅋㅋ
A-B가 1일 때와 아닐 때를 구분했다.
이유는..
예제 3이 자꾸 틀어지기 때문.....ㅋ
A-B가 1이면
V-A + A-B를 해주기로 했고
그게 아니면
V-A+B만 해주기로 했다.

긁적.. 테케 답은 잘 나왔는데..
이젠 틀렸다고 한다..
나도 올라가고 싶다.......
왜 틀렸나 생각해 봤다.
다시 입력을 봤더니
A랑 V랑 같을 때가 있다.
그럼 무조건 1이 나와야 하는데..?
왜냐면 처음부터 정상에 갔기 때문..
하지만 내 식에 의하면 무조건 2가 나온다..
예외식을 추가해 주었다.

그래도 틀렸다고 한다..
내가 놓친 예외가 뭘까..
사실 억지 패턴으로 A - B가 1일 때 예외를 처리했다.
하지만 정확한 이유를 모른다..
곰곰쓰 한 15분 생각해 봤다.
결국 A> B이기 때문에 마지막날은 -B 를안해줘도 된다.
그래서 A-B가 1이면 한 칸씩 올라가다가 마지막에만 -B를 빼주면..? 된다고 생각했다.
A - B 해주면 하루 가는 양이니까..
V이랑 나눠주고 그 몫에다가 +1 해주면 된다.
A - B=1일 경우
나눠봤자 V기 때문에 -B만 해주고
식을 바꿔봤다.

틀렸다..
지금 생각해 보니 그렇다.
마지막날 에는.. 미끄러지면 안 되는데
A-B를 V에 나누면 자동적으로 미끄러지는 경우다.
V - B도 마찬가지다.
하루 전날을 계산해줘야 한다.
하루전날이라고 하면.. 다음날 A만 가면 되니까
V - A가 되고
V - A까지만 올라오면 다음날 A 올라오면 끝이다
V - A가 A보다 커도 상관없다.
어차피 다음날 A가면 끝이기 때문..
그러면 (V - A) = 가야 할 길이
(A - B) = 밤 & 낮으로 가는 거리
나눠줘서 나머지가 0이면 다음날 +1만 해주면 된다.
만약에 나머지가 있다면 하루 더 가야 하니까 +2..
그렇게.. 답을 완성했다.

.. 세 시간에 걸쳐..
완성한 식..

해피하지 않다.
순탄하지 않았다.
분명 쉬울 줄 알았는데 세상에서 가장 어려운 식이였다.
수학적 머리가 없나 싶어.. 슬프다.
열심히 패턴만 찾았는데..
이제 문제 자체를 이해하려고 해야겠다.
예제식만 보고 공통점을 찾으려니..
뭔가 식이 엉성하다.
흑흑... 슬프다..
제미나이한테 위로받으러 가야지..
추가
if else 또한 안쓰는 방법이 있다고 합니다.
else에서 보면
나머지가 있는경우 +1을 해줘서 +2를 해주는데
이걸 프로그래밍 용어로
ceiling 이라고 합니다.
정수 나눗셈의 경우 소수점을 가차없이 버리기 때문에
나머지가 있을경우 강제로 1을 올려주는 유명한 수학 공식이 있다네요.
분모-1 한 값을 분자에 더해주는것!!
자, 사과상자를 예시를 들어볼게요
사과상자는 4개 최대
사과가 5개라면 상자는 원래 두개필요합니다.
하지만 컴퓨터녀석 5/4 하면 몫이 1이되어서 값이 안맞죠.
그래서 우리는 분모-1 한 값을 분자에 더해줍니다.
4-1 은 3이네요
5+3 / 4 해주면 답은 2네요
자 만약에 사과가 3개라고 합시다.
그럼 상자 하나에 다 들어가겠죠!
3+3 / 4 해주면 몫이 1이네요
이 식을 활용해서
우리가 아까 V - A 해준 높이에다가
매일 올라가는 높이 A - B 를 해줬으니
A - B가 분모죠
( V - A ) + ( A - B + 1) 해주고
그 값에 A - B를 나눠주는 식으로 하면
나머지가 0일때 1일때 할 필요없이
그냥 계산해주고
마지막날 +1만 해주면 됩니다!!
어때요 참쉽죠?
이 올림 식은 언제 자주쓰나?
나머지가 0으로 딱 떨어질때와 그렇지 않을때
if - else 를 쓰려고 하면
이걸 한줄로 처리하는 용도로 쓴다고 해요!
보통 조별과제 또는 게시판 페이지 수 등
묶음으로 나눌때 조금이라도 남는게 있으면
무조건 상자 하나를 더 추가해야하는 모든 상황에 쓰면 좋다고해요.
잘 활용하고싶네요.
오늘은 진짜 여기까지!!
- 완 -
'C++을 시작해봐요! > 단계문제를 풀어보아요!' 카테고리의 다른 글
| 백준 C++ 14626번 ISBN ( 브루트포스 ) (0) | 2026.03.26 |
|---|---|
| 백준 C++ 10989번 수 정렬하기 3 ( 카운팅 정렬 ) (0) | 2026.03.25 |
| 백준 C++ 2609번 최대공약수와 최소공배수 ( 유클리드 호제 ) (0) | 2026.03.23 |
| 백준 C++ 1546번 평균 ( fixed, setprecision ) (0) | 2026.03.18 |
| 백준 C++ 2798번 블랙잭 ( 브루트포스 ) (0) | 2026.03.11 |
