코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

알고리즘/백준

11659번 : 구간 합 구하기 4

2022. 7. 11. 23:38

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

 

11659번: 구간 합 구하기 4

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j

www.acmicpc.net

 

 

문제

 

 

코드

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String []input = br.readLine().split(" ");
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(input[0]); int m = Integer.parseInt(input[1]);
        input = br.readLine().split(" ");
        int num[] = new int[n+1];
        for(int i=0;i<n;i++) {
            int k = Integer.parseInt(input[i]);
            num[i+1] = k+num[i];
        }

        String w = "";
        for(int i=0;i<m;i++) {
            input = br.readLine().split(" ");
            int x = Integer.parseInt(input[0]);
            int y = Integer.parseInt(input[1]);

            sb.append((num[y]-num[x-1])+"\n");
        }
        bw.write(sb+""); bw.flush();
    }
}

 

 

해결방법

처음에 합계를 구하는 방법으로 제출하였는데 역시나 시간 초과가 났다.

어떻게 풀까 계속 고민해봤지만 방법이 떠오르지 않아 다른 사람의 풀이를 참고했다.

 

x~y 구간의 합 => y까지 더한 누적합 - (x-1)까지 더한 누적합

누적합을 이용하여 풀어야하는 문제였다. 구현은 쉬워서 구현하여 제출했지만 또 시간 초과가 났다.

첫 번째 이유는 출력할 문자열을 만들 때 StringBuilder를 쓰지 않았다.

String+= 는 할 때마다 메모리를 새로 만드므로 느리다. 반면에 StringBuilder는 메모리 옆에 쭉쭉 붙이므로 훨씬 빠르다.

두 번째 이유는 BufferedWriter를 쓰지 않았다.

BufferedWriter는 System.out.println() 보다 훨씬 빠르다. 이 점은 알고 있었지만 활용하지 못하였다. 정신을 잘 잡고 문제를 풀어야겠다.

'알고리즘 > 백준' 카테고리의 다른 글

1213번 : 팰린드롬 만들기  (0) 2022.07.15
10814번 : 나이순 정렬  (0) 2022.07.14
16435번 : 스네이크버드  (0) 2022.07.06
11651번 : 좌표 정렬하기 2  (0) 2022.07.06
2875번 : 대회 or 인턴  (0) 2022.07.06
    '알고리즘/백준' 카테고리의 다른 글
    • 1213번 : 팰린드롬 만들기
    • 10814번 : 나이순 정렬
    • 16435번 : 스네이크버드
    • 11651번 : 좌표 정렬하기 2
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바