공부하는 히욤이

3408. 세가지 합 구하기 본문

Algorithm/SW Expert Academy

3408. 세가지 합 구하기

히욤이 2019. 3. 5. 22:18

SW Expert 3408. 세가지 합 구하기

문제의 저작권은 SW Expert에 있습니다 


맨 처음 마구잡이로 풀었던 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Solution {
 
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
 
        for (int test_case = 1; test_case <=T; test_case++) {
            int s1 = 0, s2 = 0, s3 = 0;
            long n = Integer.parseInt(br.readLine());
            int cnt = 0;
            int count = 0;
 
            for (int i = 1; i <= n; i++) {
                s1+=i;
            }
            int i = 0;
            while (true) {
                i++;
                if (i%2 !=0 ) {
                    cnt++;
                    s2 = s2 +i;
                }
                if (cnt == n) {
                    break;
                }
            }
            
            i=0;
            while (true) {
                i++;
                if (i%2 == 0 ) {
                    count++;
                    s3 +=i;
                }
                if (count == n) {
                    break;
                }
            }
 
            System.out.println("#"+test_case + " " +s1 + " " +s2 + " " +s3);
        }
    }
}
 
cs


시간 제한을 못 보고 그냥 막 풀었더니 시간 초과가 떴다.

시간 초과가 왜 나지 싶어 최대한 줄이고 수정해봤는데도 계속 시간 초과가 떠서 시간을 확인해보니


띠용 ?!


테스트 케이스 100000개 합쳐서 2초였다.









1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Solution_3408 {
 
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        for (int test_case = 1; test_case <=T; test_case++) {
            long s1 = 0, s2 =0, s3 = 0;
            long N = Integer.parseInt(br.readLine());
            s2 = (N*N);
            s3 = s2+N;
            s1 = s3/2;
            System.out.println("#"+test_case + " " +s1 + " " +s2 + " " +s3);
        }
    }
}
 
cs


식을 잘 보면 규칙이 있는데 이 규칙을 활용해서 풀면 시간 이내에 풀 수 있었다


그리고 결과 값의 범위만 커질거라 생각해서 결과 변수들만 long 타입으로 받고 입력 받는 변수는 int로 받았는데


히든 테스트케이스에서는 입력 받는 수의 변수도 큰 값이 있는지 long 타입으로 줘야 Pass가 됐다


'Algorithm > SW Expert Academy' 카테고리의 다른 글

4299. 태혁이의 사랑은 타이밍  (5) 2019.03.05
1221. [S/W 문제해결 기본] 5일차 - GNS  (0) 2019.03.05
1928. Base64 Decoder  (0) 2019.03.05
2043. 서랍의 비밀번호  (0) 2019.03.05
1959. 두 개의 숫자열  (0) 2019.03.02