[프로그래머스_1] 약수의 합 JAVA

2022. 6. 23. 23:50·알고리즘/알고리즘 풀이
반응형

 

 

코딩테스트 연습 - 약수의 합

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수

programmers.co.kr

 

문제 설명

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

 

제한 사항

  • n은 0 이상 3000이하인 정수입니다.

 

입출력 예

 

CODE

class Solution {
    public int solution(int n) {
        int answer = 0;
        int temp = 0;
        
        for(int i = 1; i < n; i++) {
            if(n % i == 0) {
                temp = n / i;
                if(temp < i) break;
                answer += i + temp;
                
            }
        }
        return answer;
    }
}

위의 코드가 처음 작성한 코드이다. 어렴풋이 책에서 봤던 알고리즘 코드가 떠올라 코드 자체를 외웠다기보다는 로직을 이해했어서 기억을 상기시키면서 코드를 작성했다. for문을 돌리며 n으로 나누어 떨어지는 i 값이 있으면 temp에 n / i 값을 담았다. 그리고 answer에 저장하기 전에 temp에 담긴 값이 i 보다 작으면 중복 저장이라 생각해 for문을 종료했다. 예를 들면, n이 12고 i가 3이라고 치자. 그럼 temp에는 12 / 3 = 4가 담길 것이고 조건을 통과해 answer에 담길 것이다. 그다음 i가 4일 때 temp에는 12 / 4 = 3이 담긴다. 3은 이미 이전에 더한 값이고, 이후에 나올 i들은 모두 전에 더한 값이기 때문에 종료시켰다.

이 상태로 뿌듯해하며 코드를 제출했더니 테스트 케이스 3개가 실패했다.

 

뭐가 문제일까 하다가 테스트 케이스에 추가로 1을 넣어봤더니 결괏값이 0이 나와버리는 사태가 발생했다.

코드를 분석해보니 for 조건식에 부등호가 '<'로 되어있어서 for문 자체가 돌지 않는 게 1차적인 문제였다. 그래서 부등호를 '<='로 수정해서 실행해봤더니 이제 결괏값이 2가 나왔다. temp에 1이 저장되어있고, i가 1.. 여기서 두 개를 더한 값을 answer에 저장하고 return 해서 2라는 값이 나온 거 같아 조건문을 하나 더 추가했다.

반응형
class Solution {
    public int solution(int n) {
        int answer = 0;
        int temp = 0;
        
        for(int i = 1; i <= n; i++) {
            if(n % i == 0) {
                temp = n / i;
                if(temp < i) break;
                if(temp == i) answer += i;
                else answer += i + temp;
            }
        }
        return answer;
    }
}

뭔가 if문이 덕지덕지 붙어있는 거 같지만 그래도 노력해서 푼 것 같아 뿌듯하다.

 

실행 결과

반응형
저작자표시 비영리 변경금지 (새창열림)
'알고리즘/알고리즘 풀이' 카테고리의 다른 글
  • [프로그래머스_1] 하샤드 수 JAVA
  • [프로그래머스_1] 문자열 다루기 기본 JAVA
  • [프로그래머스_1] 가운데 글자 가져오기 JAVA
  • [프로그래머스_1] 두 정수 사이의 합 JAVA
데부한
데부한
어차피 할 거면 긍정적으로 하고 싶은 개발자
    반응형
  • 데부한
    동동이개발바닥
    데부한
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • 방통대 컴퓨터과학과 (27)
        • 잡담 (9)
        • 3학년1학기 (17)
      • 프로젝트 및 컨퍼런스 회고 (1)
        • 프로젝트 (4)
        • 한이음 프로젝트 (0)
        • 회고 (3)
      • 공부 (165)
        • Spring (37)
        • JPA (71)
        • 인프런 워밍업 클럽_BE (10)
        • Java (6)
        • React.js (27)
        • 넥사크로 (11)
        • 기타 (3)
      • 알고리즘 (85)
        • 알고리즘 유형 (10)
        • 알고리즘 풀이 (57)
        • SQL 풀이 (18)
      • 에러 해결 (13)
      • 잡담 (7)
        • 국비교육 (2)
        • 구매후기 (5)
        • 진짜 잡담 (0)
  • 블로그 메뉴

    • Github
    • Linkedin
    • 홈
    • 방명록
    • 글쓰기
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    방통대
    springboot
    Java
    프로그래머스
    SpringBoot를 이용한 RESTful Web Service 개발
    JPA
    Spring
    전자정부프레임워크
    egov
    RESTful
    백준
    자바스크립트
    프론트엔드
    react
    코딩테스트
    토비의스프링부트
    토이프로젝트
    oracle
    기출문제
    에러해결
    스프링부트
    SQL
    MSA
    QueryDSL
    IT
    알고리즘
    개발자
    운영체제
    넥사크로
    인프런
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데부한
[프로그래머스_1] 약수의 합 JAVA
상단으로

티스토리툴바