나 개발자 진짜 되냐?

바킹독 0x02 문제14 - 숫자 / 백준 10093번 본문

C++을 시작해봐요!/알고리즘을 공부해봐요!

바킹독 0x02 문제14 - 숫자 / 백준 10093번

Snow Rabbit 2025. 8. 6. 19:15

저어엉말 오랜만에 문제를 푼다.

한 달 만이다.ㅋㅋㅋㅋ

아니 그래서 나 메인함수도 못썼다니까?

 

아 진짜 이래서 개발자 되냐????

 

아니 나 아직도 헷갈리네

void main 이거 안되나?? 왜 오류 나지..

바로 지피티

긁적..;; C++은 안된다고 한다.

 

그렇군....

 

숫자. 풀어보자.


 

 

쉬운 거 같았다.

서브태스크? 이 친구가 뭘까 고민만 했다.

 

 

나름 야무지게 풀었다.

 

근데 채점 8%에서 틀렸다고 떴다.

 

그 뒤 서브태스크를 봤다..

뭔가 10의 15승??? int는 사고가 날 거 같았다.

 

그래서 float로 바꿨는데도 오류가 났다.

그게 문제가 아니라는 것을 알았다..

도대체 뭘까

하며 누군가가 써준 힌트? 팁? 을 보았다.

 

1. 입력범위 보기

정수자료형은 안된다. int

 

2. a와 b의 대소관계가 적혀있지 않다.

조건을 나눠서 풀어야 한다.

 

3. a와 b가 꼭 다르지만은 않다

그 뜻은.. 같을 수도 있다는 것..
같은 숫자 사이엔 0이 나와야 한다..

 

이러면..

조건문도 필요하고 0인 것도.. 생각보다 많이 복잡했다.

진짜 쉬울 줄 알았는데... 거짓말....

아니 쉽다고 안 했는데 거짓말은 뭐야..

 

 

지피티한테 인트 범위에 대해 물었다.

근데 지피티가 인트 범위를 설명하며..

10의 15승은 long long를 써야 한다고 알려줬다.

 

왜인가 했더니..

 

float는 정확한 정수를 표현하지 못한다고 한다.

 

범위는 크지만 ( 10의 38승 )

부동소수점 수를 표현하는 방식이라

정수를 일일이 표현하려면 부동소수점의 오차가 발생하게 된다고 한다.

 

그래서 double도 안되고 float도 안되고

long long만 된다고 한다.

 

double도 8비트 실수라 정수표현에 안된다고 한다.

와 변수명이 나를 이렇게 혼란스럽게 하다니 무서운 문제였네..?

오케이 이제 정수형으로 바꿔보자, long long으로!

 

그리고 2번을 풀어본다.

조건을 달았다. a가 더 클 때 b가 더 클 때!

 

3번은.. 같다고 했으니

둘 사이에는 값이 0 이여야 하고

두 번째 줄은 아예 나오면 안 된다. 

 

흠.. 괜찮은데? 답은!! 오!! 정답이다!! 100점이라고 적혀있다!!

 

좀 길어서 답지를 봤는데.. 참 짧다...ㅋㅋㅋ

 

보지 않고 다시 짜보고 싶었는데.. 나는 이게 최선이었다.

 

거기서 새롭게 알게 된 swap() 함수

swap는 두 변수의 값을 서로 바꿔주는 함수라고 한다.

a > b 라면 swap (a, b) 해주면 b가 더 큰 수가 된다.

 

 

이렇게 해주면! 더 짧게 문제풀이가 가능하다!

 

그래도 힌트만 보고 풀었으니.. 그걸로 오케이 아닌가? 싶기도 하고

swap 자주 써먹어보자!!!