인프런 커뮤니티 질문&답변

dkswhdgur1209님의 프로필 이미지
dkswhdgur1209

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3-F

3-F 최솟값 질문입니다!

작성

·

337

0

안녕하세요 강사님!

풀이 방법 중 _num의 최댓값을 구하기 위해 ret의 최솟값을 -987654321(9자리)로 선언 했습니다.

저는 만약에 string s가 1-9*9*9*9*9*9*9*9*9로 나온다면 ret의 최솟값을 선언하기 위해 저는 어림짐작으로 (1-9) 9^8 정도의 출력값이 나오겠다라 생각했고 이를 직관적으로 계산하기 위해 -8 * 9^8을 -8 * 10^8로 바꿔 셈했습니다.

그 결과 -800000000(9자리) 였고, 이보다 더 작은 수가 나올 수도 있겠다는 생각을 했었습니다. (결과적으로 -987654321보다 작은 수가 나올 수도 있겠다란 생각으로 -987654321을 최솟값으로 둬도 괜찮나?란 생각을 문제풀이 당시 했었습니다)

더불어, 문제에서 정답은 2^31부터 -2^31의 미만이라는 값이 주어진다고 했고 저는 ret의 최솟값을 문제에서 설정한 범위 밖에서 설정하려고 했지만 -2^31을 보고 이 보다 작은 수를 어떻게 ret으로 선언할지에 어려움을 겪었고, -2^31이 -987654321보다 작다보니 -987654321로 최솟값을 선언하지 못하였습니다.

그래서, -987654321란 최솟값이 다른 문제에도 적용되는 통용되는 최솟값인지 그리고 저의 생각 중 어떤 곳에 오류가 있었는지 궁금하여 질문드립니다!

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 1209님 ㅎㅎ

예리하시네요. ㅎㅎ

이렇게 제 코드나 해설에 대해 그냥 수용하는게 아니라 자신이 가지고 있는. 또는 이 강의를 통해 배웠던 지식을 기반으로 내 생각이 맞는 거 같은데 틀린게 아닐까? 하는 비판적인 자세는 너무나도 좋습니다.

저는 만약에 string s가 1-9*9*9*9*9*9*9*9*9로 나온다면 ret의 최솟값을 선언하기 위해 저는 어림짐작으로 (1-9) 9^8 정도의 출력값이 나오겠다라 생각했고 이를 직관적으로 계산하기 위해 -8 9^8을 -8 10^8로 바꿔 셈했습니다.

>>

음.. 일단 최솟값은 1-9*9*9*9*9*9*9*9*9가 맞습니다. 이를 계산하면 -387,420,488

이라는 숫자가 됩니다.

이는 -987654321 보다는 큰 숫자이며 -987654321이 더 작은 숫자입니다. -987654321을 최솟값으로 해도 됩니다.

 

더불어, 문제에서 정답은 2^31부터 -2^31의 미만이라는 값이 주어진다고 했고 저는 ret의 최솟값을 문제에서 설정한 범위 밖에서 설정하려고 했지만 -2^31을 보고 이 보다 작은 수를 어떻게 ret으로 선언할지에 어려움을 겪었고, -2^31이 -987654321보다 작다보니 -987654321로 최솟값을 선언하지 못하였습니다.
>> 만약 문제에서 -2^31이 최솟값으로 나온다면 long long 을 먹여서 -1e18로 하시면 됩니다.

 

그래서, -987654321란 최솟값이 다른 문제에도 적용되는 통용되는 최솟값인지 그리고 저의 생각 중 어떤 곳에 오류가 있었는지 궁금하여 질문드립니다!

>> 보통의 경우에는 먹히는 최솟값입니다. 문제의 범위가 int일 경우에는 말이죠. 다만, 이 문제의 경우 지문 자체가 헷갈리게 표기가 된 점이 있습니다. 저 지문, 정답은 2^31부터 -2^31의 미만 이라는 것은 이 문제에서는 int형을 다룰거야~! 라고 표기한건데 지금 보니까 좀 헷갈리긴 하네요. ㅎㅎ

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

 

dkswhdgur1209님의 프로필 이미지
dkswhdgur1209

작성한 질문수

질문하기