Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

[2023-09-15] dohyun #209 #235

Merged
merged 1 commit into from
Sep 17, 2023
Merged

[2023-09-15] dohyun #209 #235

merged 1 commit into from
Sep 17, 2023

Conversation

limstonestone
Copy link
Contributor

PR Summary

풀이시간

  • 약 1시간 30분 풀이 후 실패로 답지 참조

접근법

  • N, K 가 억, 십억 -> What the ...?
  • 구현 자체는 쉬워보이지만 시간복잡도 + 공간복잡도를 최대한으로 줄여야 함
    • O(N)? O(logN)?
  • 자료구조 등을 잘 활용하더라도 이 정도로 줄이긴 힘들 것 같음 -> 경우의수에 규칙이 있을 것 같다!

----- 10 단위수 -----
10 11 12 13 14 15 16 17 18 19 -> 10 * 2
20 ... 29 -> 10 * 2
~
90 ... 99 -> 10 * 2
총합 -> 10 * 2 * 9

----- 100 단위수 -----
100 101 ... 199 -> 100 * 3
~
900 901 ... 999 -> 100 * 3
총합 -> 100 * 3 * 9

  • 즉 10 * X 단위수라면(X >= 1), 만들 수 있는 총 인덱스는 ((100)*1 * 9) + ((101)2 * 9) + ... ((10**X)(X+1) * 9)
  • 그럼 X 는 어떻게 찾을 것인가? -> len(N)-1
  • 그 다음 K 이전 인덱스들을 싹 다 빼고 N 도 10 * X 부터 시작하면 됨
def recursion(X):
    return 9 * sum(10**i * (i+1) for i in range(X))
  • 그 과정에서 몫과 나머지를 적절히 이용하면 됨
  • 라고 1시간 반동안 삽질하다가 계속 틀려서 확인해보니 완전 잘못 접근 ..ㅎ
    • N 이 아무리 큰 숫자라도 K 가 아주 작은 숫자라면 앞에를 버리는 순간 답이 나올수가 없음
    • 틀린 풀이를 첨부하려다가 아예 생각자체를 잘못한 것 같아서 그냥 첨부 안하겠습니다!
  • 정답 풀이를 계속 읽어봤는데도 잘 모르겠네요 ㅠㅠ 스터디 시간에 집중해서 듣겠습니다..!

회고

  • 나름대로 접근은 괜찮았던 것 같았는데 .. ㅠㅠ 계속 틀리니까 멘탈이 나가버린 것 같음
  • 중간과정에서 출력 찍어보면서 잘못된 방향으로 접근한건 아닌지 디버깅 한번씩 해보고 넘어가기

ISSUE NUMBER

@limstonestone limstonestone self-assigned this Sep 14, 2023
@limstonestone limstonestone linked an issue Sep 14, 2023 that may be closed by this pull request
Copy link
Member

@Woo-Yeol Woo-Yeol left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정답 풀이 코드들을 보며 정말 대단하다는 걸 느꼈던 것 같습니다! 고생하셨어요 도현님!!


회고
- 나름대로 접근은 괜찮았던 것 같았는데 .. ㅠㅠ 계속 틀리니까 멘탈이 나가버린 것 같음
- 중간과정에서 출력 찍어보면서 잘못된 방향으로 접근한건 아닌지 디버깅 한번씩 해보고 넘어가기
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

정말 고수가 아니라면 코드를 작성하면서 디버깅을 하기는 어려울 것 같습니다! 요새는 코테를 진행할 때 옆에 종이를 두고 하나씩 써보면서 풀이를 하는 것 같습니다! 코테의 1,2번 문제 같이 조금 긴장을 풀어주는 문제가 아니라면 다음의 방법을 추천드려요!

nine *= 10 # 다음 자릿수에서 가능한 숫자 범위 업데이트

# k번째 자리 숫자를 찾음
ans = (ans + 1) + (k - 1) // digit
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

와.. 완전 깔끔하게 찾을 수 있었군요....

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

while문으로 범위 찾는 부분까지 똑같았는데, 이 부분에서 k번째 자리수 찾는게 저랑 달라요! 제 코드보다 이게 훨씬 깔끔하네요..!!🤣

nine *= 10 # 다음 자릿수에서 가능한 숫자 범위 업데이트

# k번째 자리 숫자를 찾음
ans = (ans + 1) + (k - 1) // digit
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

while문으로 범위 찾는 부분까지 똑같았는데, 이 부분에서 k번째 자리수 찾는게 저랑 달라요! 제 코드보다 이게 훨씬 깔끔하네요..!!🤣

Copy link
Contributor

@zsmalla zsmalla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

필요한 숫자를 찾아내고, 해당 숫자를 처리하는 과정이 정말 단조롭고 깔끔한 풀이인 것 같습니다. 다만 해당 풀이에도 K-1에 대한 설명이 없어서 아쉬운 것 같네요 ㅠㅠ 고생하셨습니다!

@limstonestone limstonestone merged commit 8397659 into main Sep 17, 2023
@limstonestone limstonestone deleted the dohyun-#209 branch September 17, 2023 19:32
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BOJ] 수 이어 쓰기 2
4 participants