프로그래머스 문제풀이/알고리즘 (JAVA)

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 2 (6~8번 문제풀이) / Level 0 (224/224) / Level 1 (77/77)

남건욱 2023. 12. 21. 13:59

목차

    반응형
    6. 숫자의 표현

    문제

    class Solution {
        public int solution(int n) {
            int answer = 0;
            
            for(int i=1; i<=n; i++){
                int sum = 0;
                
                for(int j=i; j<=n; j++){
                    sum += j;
                    
                    if(sum == n){
                        answer++;
                        break;
                    } else if(sum > n){
                        break;
                    }
                }
            }
            
            return answer;
        }
    }

    <작성한 코드>

    두 개의 for문을 사용했다. 첫 번째 for문에서는 i는 1부터 n까지 범위를 지정해 주고 합을 저장할 변수 sum을 만들어줬다. 두 번째 for문에서는 j부터 n까지 sum에 더해가며 n과 같을 때까지 더한다. 만약 n과 일치하게 되면 answer에 1을 더하고 반복문을 종료한다. 만약 sum이 더 커져버린다면 더하지 않고 반복문을 종료시켰다. 그 뒤 answer을 반환했다.

     

     

     

    7. 다음 큰 숫자

    문제

    class Solution {
        public int solution(int n) {
            int answer = 0;
            int nCnt = 0;
            
            String strN = Integer.toBinaryString(n);
            for(int i=0; i<strN.length(); i++){
                if(strN.charAt(i) == '1') nCnt++;
            }
            
            for(int i=n+1; i<=1000000; i++){
                int iCnt = 0;
                
                String strI = Integer.toBinaryString(i);
                for(int j=0; j<strI.length(); j++){
                    if(strI.charAt(j) == '1') iCnt++;
                }
                
                if(nCnt == iCnt){
                    answer = i;
                    break;
                }
            }
            
            return answer;
        }
    }

    <작성한 코드>

    정답으로 제출할 변수 answer과 정수 n을 이진수로 변환했을 때 1의 개수를 담을 변수 nCnt를 선언했다. 그 뒤 Integer.toBinaryString(n)을 사용해서 n을 이진법으로 변환했다. 그 뒤 for문을 사용해서 strN의 1의 개수를 구했다. 다음으로는 n+1부터 조건에 나온 100000 이하의 수를 반복시키며 nCnt와 값이 같은, 즉 1의 개수가 같은 값을 찾아줬다. 그 뒤 answer에 i를 넣고 반복문을 종료했다. 마지막으로 answer을 반환해 줬다.

     

     

     

     

     

    8. 피보나치 수

    문제

    import java.util.*;
    
    class Solution {
        public int solution(int n) {
            int answer = 0;
            int[] fibo = new int[1000001];
            
            fibo[0] = 0;
            fibo[1] = 1;
            
            for(int i=2; i<=n; i++){
                fibo[i] = (fibo[i-1] + fibo[i-2]) % 1234567;
            }
            
            answer = fibo[n];
            
            return answer;
        }
    }

    <작성한 코드>

    정수형 배열 fibo를 만들어 크기를 1000001개로 지정해 줬다. 그 뒤 fibo [0]에는 0, fibo [1]에는 1을 대입해 줬다. 다음은 for문을 사용해서 2부터 n까지 fibo [i]에 fibo [i-1] + fibo [i-2]를 1234567로 나눈 나머지값을 넣어줬다. 그 뒤 fibo [n]의 값을 answer에 넣어주고 반환하였다.

    반응형
    프로필사진

    남건욱's 공부기록