728x90
반응형

 

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

 

2355번: 시그마

첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647)

www.acmicpc.net

 

 

일단 내가 풀 때 자잘한 실수도 많았던 문제고 브론즈3이라고 무시하고 들어갔다가 계속 틀려서 은근 애먹었다.

Long.parseLong도 은근 자주 쓰는 것 같다.

 

1) a가 b보다 큰 경우

2) a,b가 모두 양수

3) a,b가 모두 음수

4) a만 음수 (a가 b보다 작다는 것을 만족할 때)

5) a, b를 long으로 입력받았는지

6) for문이 들어가면 최악의 경우 시간초과가 발생 > 시그마 공식으로 풀기

 

이 6가지만 신경써서 코딩했다면 잘 풀렸을 것 같다.

 

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        long a = Long.parseLong(st.nextToken());
        long b = Long.parseLong(st.nextToken());
        if(a>b){
            long tmp = a;
            a = b;
            b = tmp;
        }
        long sum = 0;
        if(a<0){
            if(b<0){
                a = -a;
                b = -b;
                sum = a*(a+1)/2 - b*(b+1)/2 + b;
                sum = -sum;
            }
            else{
                a = -a;
                long tmp = a*(a+1)/2;
                tmp = -tmp;
                sum = b*(b+1)/2;
                sum += tmp;
            }
        }
        else sum = b*(b+1)/2 - a*(a+1)/2 + a;
        System.out.println(sum);
    }
}
728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기