코딩테스트

[프로그래머스] 다음 큰 숫자_12911

라임온조 2023. 7. 21. 11:40

문제 및 코드

1. 생각

// 생각
    // 그냥 냅다 구현...
// 구현
    // n을 2진수로 변환했을 때 1의 개수를 구한다
    // while을 돈다
        // n을 1 증가시킨 후의 n을 2진수로 변환한 후 1의 개수를 구한다
        // 만약 위에서 구한 n의 1 개수와 1 개수가 같으면 break
        
정확성은 맞지만 효율성에서 틀림...

2. 회고

  • 정확성은 맞는데 효율성은 틀림. 이런 부분이 가장 난감하다... while 돌면서 1씩 증가하면서 다 살펴봐서 그런걸까? 아니면 replaceAll 메소드가 시간을 많이 잡아 먹는 걸까? replaceAll을 없애고 그냥 2진수 String을 for문 돌면서 1의 개수를 세어주니 통과가 되었다...
  • replaceAll의 시간복잡도는 O(n*m)이고 2진수 String을 for문 돌면서 1 개수 세어주는 것은 O(n)인데 왜 차이가 나는 거지? 어차피 둘다 결국엔 O(n)아닌가? replaceAll의 경우 m이 정규식에 따라 증가할 수도 있다고 하는데 여기선 정규식이 엄청 간단한데 그거 때문인가? 지금에서는 이게 가장 유력한 원인이다... 하지만 왜 그런건지 정확히 이해가 안 간다

 

3. 체크

풀이 횟수 시간 정답 여부 참고 여부
1 20분   O