hist0613   9년 전

일단 입력받은 숫자를 문자열로 만들어서

그보다 작은 수는

가장 오른쪽의 0과, 0 이후에 처음으로 나타난 1의 위치를 바꿔주는 방법으로 구했고

그보다 큰 수는

가장 오른쪽의 1과, 1 이후에 처음으로 나타난 0의 위치를 바꿔주는 방법으로 구했습니다

각각의 예외 처리는 자릿수가 바뀌는 경우를 생각했습니다.

제가 생각하지 못 한 예외가 뭐가 있을까요 ㅜㅜ

또, 이 문제는 테스트 코드를 어떤 식으로 만들어야 할지 조언 좀 주시면 감사하겠습니다!

pichulia   9년 전

1100000111 보다 작은 수 중 가장 큰 수는

1011110000 입니다.

즉, 이진 숫자 2개만 바꾼다고 해서 A보다 작은 수 중 "가장 큰 수"가 결정되는 것은 아닙니다. 무언가가 좀 더 필요하죠...

뭐, 비슷한 원리로

1100000111 보다 큰 수중 가장 작은 수는

1100001011 이고요

hist0613   9년 전

으어... 고쳤는데도 정답이 안 뜨네요 ㅜㅜ

h0ngjun7   9년 전

A보다 작은 이진수 중 가장 큰 수는, 작은 자리수부터 보다가 1이 나오면 그걸 0으로 만들어주고 그 뒤에 나머지를 전부 1로 만들어주면 될 것 같아요. A보다 큰 이진수 중 가장 작은 수는, 작은 자리수부터보다가 0이 나오면 1로 만들어주고 그 뒤에 나머지를 0으로 만들어주면 될 것 같구요. 하지만 저는 #include <algorithm>에 있는 next_permutation과 prev_permutation을 써서 문제를 해결했어요.

hist0613   9년 전

헐.................................................. 그런 방법이..............................................................

댓글을 작성하려면 로그인해야 합니다.