Skip to content

[WEEK11] 이배진#49

Open
LeeBaeJin wants to merge 1 commit into
mainfrom
bjlee
Open

[WEEK11] 이배진#49
LeeBaeJin wants to merge 1 commit into
mainfrom
bjlee

Conversation

@LeeBaeJin
Copy link
Copy Markdown
Collaborator

이렇게 풀었어요

1. 숫자의 표현

  • 문제를 풀었어요.
  • 풀이 시간 : 13분

1) 복잡도 계산

시간복잡도: O(n^2)
공간복잡도: O(1)


2) 접근 아이디어

이 문제를 보자마자 "투포인터(Two Pointer)"를 떠올렸습니다. 그래서 이중 반복문을 이용하여 n=15 라면 1~15까지 A반복문를 선언하고, 그 A반복문안에서 B반복문을 추가하여 n과 합계가 똑같은 부분을 찾아내서 카운트를 증가시키는 방법으로 풀었습니다.


3) 회고

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for (int i = 1; i <= n; i += 2) { // 홀수만 확인
            if (n % i == 0) {
                answer++;
            }
        }
        
        return answer;
    }
}

이 코드를 보시면, 수학적 성질을 이용한 풀이입니다.
"어떤 자연수 n을 연속된 자연수의 합으로 표현하는 방법의 수는 n의 홀수 약수의 개수와 같다."
예를 들어 n=15일 때, 15의 약수는 1, 3, 5, 15 이들은 모두 홀수이므로 총 4개가 나온다는 결과를 뽑아낼 수 있다는 방법을 이용한 코드입니다.

수알못은 웁니다... 한 수 배웠습니다...

궁금하신분은 https://readble-ko.tistory.com/199 <- 여기 링크로 가시면 더욱 자세한 설명을 확인해보실 수 있습니다.



2. 다음 큰 숫자

  • 문제를 풀었어요.
  • 풀이 시간 : 48분

1) 복잡도 계산

시간복잡도: O(k log n)
공간복잡도: O(log n)


2) 접근 아이디어

이진수를 변환해서 비교해봐야 한다는 건 바로 알았으나 막상 풀어보려고 하니 좀 헤맸습니다. 어찌 되었든 이전 문제인 "이진 변환 반복하기" 문제에서 힌트를 좀 얻어. 아예 정수 78와 정수 78보다 더 클 숫자를 이진수로 변환해서 비교해서 어차피 이진수 "1"의 갯수만 똑같은 숫자를 찾으면 되는 것 아닌가? 라는 생각이 들어 이러한 풀이를 도출해냈습니다.


3) 회고

class Solution {
    public int solution(int n) {
        // 1. 기준이 되는 n의 2진수 1의 개수를 구합니다.
        int targetBitCount = Integer.bitCount(n);
        
        // 2. n보다 큰 숫자부터 1씩 증가시키며 확인합니다.
        int nextNumber = n + 1;
        
        while (true) {
            // 3. 증가시킨 숫자의 1의 개수가 targetBitCount와 같은지 확인합니다.
            if (Integer.bitCount(nextNumber) == targetBitCount) {
                return nextNumber;
            }
            
            // 4. 같지 않다면 다음 숫자로 넘어갑니다.
            nextNumber++;
        }
    }
}

세상에나 bitCount() 라는 이진수 갯수를 구하는 Java 내장 함수는 생각지도 못했습니다. Java 내장 함수가 참 다양한게 많구나 라는 걸 다시 느낀 문제였습니다. 심지어 이 방식은 객체를 전혀 만들지 않고, CPU가 가장 잘하는 0과 1 계산만으로 순식간에 개수를 찾아낸다고 합니다. 성능상으로도 오히려 이게 더 좋네요... 여러모로 요번 주차 문제는 생각지도 못한 부분들이 많았습니다

Copy link
Copy Markdown
Collaborator

@raejun92 raejun92 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
Copy Markdown
Member

@doitchuu doitchuu 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
Copy Markdown
Collaborator

@sik9252 sik9252 left a comment

Choose a reason for hiding this comment

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

ㅠㅠ 일이 많아서 리뷰 까먹고 있었네요 죄송함당 ㅠㅠ 슬기님 말씀처럼 주석 달아주셔서 더 이해하기 편한것 같아요 감사해요~ 고생하셨습니다!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants