베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 알고리즘
    • 스레드
    • 토비스프링
    • C++
    • java
    • 자바8
    • 데이터베이스
    • BFS
    • 백준
    • 스프링
    • 운영체제
    • jpa
    • 이펙티브자바
    • 스프링시큐리티
    • 자바
    • 코드업
    • dfs
    • 함수형인터페이스
    • Spring
    • leetcode

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    알고리즘/Baekjoon

    [백준] 17425 약수의 합2 (Java)

    2022. 5. 25. 13:43

    ✉️문제

    https://www.acmicpc.net/problem/17427

     

    17427번: 약수의 합 2

    두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더

    www.acmicpc.net

     

    📝 접근

    1. 테스트 케이스가 여러개이므로 미리 배열에 값들을 저장해 놓아야 한다.

    // f(A)를 구하는 과정
    for(int i = 1; i < SIZE; i++) {
        for(int j = i; j < SIZE; j = j + i) {
            arr[j] += i;
        }
    }
    
    // g(A) 구하기
    for(int i = 1; i < SIZE; i++) {
        answer[i] = answer[i-1] + arr[i];
    }

     

    2. 출력이 많아질 수 있으므로 BufferedWriter를 사용하는 것이 좋다.

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

     

    🗝 문제풀이

    package divisor;
    
    import java.io.*;
    import java.util.Scanner;
    
    public class B17425RRR {
    
        static final int SIZE = 1000001;
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            long[] arr = new long[SIZE];
            long[] answer = new long[SIZE];
    
            // f(A)를 구하는 과정
            for(int i = 1; i < SIZE; i++) {
                for(int j = i; j < SIZE; j = j + i) {
                    arr[j] += i;
                }
            }
    
            // g(A) 구하기
            for(int i = 1; i < SIZE; i++) {
                answer[i] = answer[i-1] + arr[i];
            }
    
            int n = Integer.parseInt(br.readLine());
            while(n-- > 0) {
                int input = Integer.parseInt(br.readLine());
                bw.write(answer[input] + "\n");
            }
    
            bw.flush();
        }
    }

     

      '알고리즘/Baekjoon' 카테고리의 다른 글
      • [백준] 14719 빗물 (JAVA)
      • [백준] 2504 괄호의 값
      • [백준] 17427 약수의 합 2
      • [백준] 1037 약수 (Java)
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바