2464번 - 비밀번호
일단 입력받은 숫자를 문자열로 만들어서
그보다 작은 수는
가장 오른쪽의 0과, 0 이후에 처음으로 나타난 1의 위치를 바꿔주는 방법으로 구했고
그보다 큰 수는
가장 오른쪽의 1과, 1 이후에 처음으로 나타난 0의 위치를 바꿔주는 방법으로 구했습니다
각각의 예외 처리는 자릿수가 바뀌는 경우를 생각했습니다.
제가 생각하지 못 한 예외가 뭐가 있을까요 ㅜㅜ
또, 이 문제는 테스트 코드를 어떤 식으로 만들어야 할지 조언 좀 주시면 감사하겠습니다!
1100000111 보다 작은 수 중 가장 큰 수는
1011110000 입니다.
즉, 이진 숫자 2개만 바꾼다고 해서 A보다 작은 수 중 "가장 큰 수"가 결정되는 것은 아닙니다. 무언가가 좀 더 필요하죠...
뭐, 비슷한 원리로
1100000111 보다 큰 수중 가장 작은 수는
1100001011 이고요
으어... 고쳤는데도 정답이 안 뜨네요 ㅜㅜ
A보다 작은 이진수 중 가장 큰 수는, 작은 자리수부터 보다가 1이 나오면 그걸 0으로 만들어주고 그 뒤에 나머지를 전부 1로 만들어주면 될 것 같아요. A보다 큰 이진수 중 가장 작은 수는, 작은 자리수부터보다가 0이 나오면 1로 만들어주고 그 뒤에 나머지를 0으로 만들어주면 될 것 같구요. 하지만 저는 #include <algorithm>에 있는 next_permutation과 prev_permutation을 써서 문제를 해결했어요.
헐.................................................. 그런 방법이..............................................................
댓글을 작성하려면 로그인해야 합니다.
hist0613 9년 전 1
일단 입력받은 숫자를 문자열로 만들어서
그보다 작은 수는
가장 오른쪽의 0과, 0 이후에 처음으로 나타난 1의 위치를 바꿔주는 방법으로 구했고
그보다 큰 수는
가장 오른쪽의 1과, 1 이후에 처음으로 나타난 0의 위치를 바꿔주는 방법으로 구했습니다
각각의 예외 처리는 자릿수가 바뀌는 경우를 생각했습니다.
제가 생각하지 못 한 예외가 뭐가 있을까요 ㅜㅜ
또, 이 문제는 테스트 코드를 어떤 식으로 만들어야 할지 조언 좀 주시면 감사하겠습니다!