Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🔗 문제 링크
https://www.acmicpc.net/problem/31926
level: 실버 1
문제 요약
daldidalgo
가 총 N번 반복된 후,daldidan
으로 끝나는 문자열을 출력한다.매초 민우는 두 개의 작업 중 하나를 선택하여 시행할 수 있다.
ajouapcshake
라면,ajouapcshake
를 복사할 수도,apc
를 복사할 수도 있지만,aashake
를 복사하여 붙여넣을 수는 없다.민우가 문제에 언급된 시행 중 하나를 선택하여 매초 시행했을 때,
N
번의daldidalgo
를 입력한 후1
번의daldidan
을 입력할 수 있는 최소 시간을 출력한다.💡 풀이 아이디어
1️⃣ 그리디로 접근하기
N = 1
인 경우 총 10번d a l d i dal g o
(8번) +daldida n
(2번)N = 2
인 경우 총 11번d a l d i dal g o
(8번) +daldidalgo
(1번) +daldida n
(2번)위의 2가지의 경우를 보았을 때
daldidalgo
를 한 번 입력하게 되면 존재하는 개수만큼 추가할 수 있겠다는 생각이 들었습니다. 만약daldidalgo
가 3, 4번 필요한 경우,daldidalgo
가 이미 2개가 존재할 때 부분 문자열 1개 또는 2개를 선택하면 되기에 동일하게 1초가 추가로 필요하다고 생각했습니다.따라서 daldidalgo를 입력할 수 있는 개수가 2의 배수로 늘어날 수 있습니다.
이를 바탕으로 작성한 1차 시도 코드는 아래와 같습니다.
햐지만 이 코드는
틀렸습니다
..2️⃣ 생각하지 못했던 최소 입력..!
도대체 뭐가 틀린거지?!?! 라고 혼자 생각하던 와중
daldidan
에 있는daldida
또한daldidalgo
의 부분 문자열이 될 수 있다는 사실을 깨달았습니다..따라서
daldidan
의n
을 제외한daldida
또한daldidalgo
의 횟수에 포함시켜 계산하였습니다.이렇게 바꾸면서
time
의 초기값이9
로 변경되고N -= 1
코드를 지웠습니다.코드를 수정하고 제출했더니 성공 ~!
📝 새로 학습한 내용
다른 분의 풀이 를 통해 비트 연산으로도 쉽게 계산이 가능하다는 것을 알게되었습니다. 제가 계산할 때에도 2의 배수를 계속 곱하고 값을 빼주는 과정을 반복문 내부에서 진행하는데, 이 과정이 비트 시프트 연산(>>)로 이루어질 수 있습니다. 결국 비트의 자릿수만큼이 더해집니다. 아주 깔끔하게 작성될 수 있습니다..!
이 방식을 python에서 적용시키면
bin
함수를 적용해서 아래와 같이 작성할 수 있을 것 같습니다.bin
함수는 10진수를 2진수로 변환시켜주는데0b
가 앞에 함께 출력되기 때문에 2를 빼 주었습니다.📚 참고 자료
🙅🏻♀️