SSAFY/SWEA

[SWEA] 7510 : 상원이의 연속 합

믕비 2023. 5. 20. 15:01
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AWoEzJFa2A4DFARq&categoryId=AWoEzJFa2A4DFARq&categoryType=CODE&problemTitle=&orderBy=RECOMMEND_COUNT&selectCodeLang=JAVA&select-1=3&pageSize=10&pageIndex=5 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

N의 범위가 100만이라 이중포문을 사용하기엔 수가 너무 커서 범위를 줄여줘야 한다고 생각했음.

주어진 N을 /2한 수까지만 for문을 돌려줬고 (어차피 그 이상은 연속된 수를 더하면 N을 초과하기 때문)

결과값은 N 자신의 수 1개도 연속된 수의 경우로 합산되기 때문에 1로 초기화해줬다.

 

내 코드

메모리 : 19868 KB

시간 : 417 ms

코드길이 : 834 B

 

[내 코드]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Solution {
	static int N, result;

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		int T = Integer.parseInt(br.readLine());
		for(int t = 1; t <= T; t++) {
			sb.append('#').append(t).append(' ');
			N = Integer.parseInt(br.readLine());
			result = 1;
			
			count(N);
			sb.append(result).append('\n');
		}
		System.out.print(sb);
	}
	
	static void count(int num) {
		for(int i = 1; i <= num / 2; i++) {
			int sum = 0;
			int temp = i;
			while(true) {
				sum += temp;
				if(sum > num)
					break;
				if(sum == num) {
					result++;
					break;
				}
				temp++;
			}
		}
		return;
	}
}

실행시간이 92ms인 코드가 있어서 가져와봤음.

import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class Solution {
    private static int[] nums;
 
    private static void prefunction() {
        nums = new int[1414];
        nums[0] = 1;
        for(int i=1; i < 1414; i++) nums[i] = (i+1) + nums[i-1];
    }
     
    public static void main(String[] args) throws Exception {
        prefunction();
         
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
         
        int T = Integer.parseInt(br.readLine());
        for(int tc=1; tc <= T; tc++) {
            initAndCalc(br);
            sb.append("#").append(tc).append(" ").append(ans).append("\n");
        }
        System.out.println(sb);
    }
 
    private static int ans;
     
    private static void initAndCalc(BufferedReader br) throws Exception {
        int N = Integer.parseInt(br.readLine());
        ans = 1;
         
        for(int i=0; nums[i] < N; i++) {
            if((N-nums[i]) % (i+2) == 0) ans++;
        }
    }
 
}
반응형

'SSAFY > SWEA' 카테고리의 다른 글

[SWEA] 4299 : 태혁이의 사랑은 타이밍  (0) 2023.05.20
[SWEA] 5789 : 현주의 상자 바꾸기  (1) 2023.05.20
[SWEA] 3307 : 최장 증가 부분 수열  (0) 2023.05.15
[SWEA] 13038 : 교환학생  (1) 2023.05.13
[SWEA] 14178 : 1차원 정원  (0) 2023.05.13