SSAFY/SWEA

[SWEA] 1493 : 수의 새로운 연산

믕비 2023. 5. 8. 18:37
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b-QGqADMBBASw 

 

SW Expert Academy

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

swexpertacademy.com

패턴찾기 연습을 할 수 있던 문제. 근데 처음에 p,q 범위보고 생각없이 포문을 i < 101로 돌려서 틀렸음.

뭐든 한 번 더 생각해보자. 요즘 시그마공식을 사용하는 일이 잦은 것 같다. 옛날 생각도 나고 문제 푸는데 재밌었음.

 

내 코드

메모리 : 20684 KB

시간 : 122 ms

코드길이 : 1359 B

 

[내 코드]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Solution {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;
         
        int T = Integer.parseInt(br.readLine());
        for(int t = 1; t <= T; t++) {
            sb.append('#').append(t).append(' ');
            st = new StringTokenizer(br.readLine());
            int p = Integer.parseInt(st.nextToken());
            int q = Integer.parseInt(st.nextToken());
             
            int x = 0;
            int y = 0;
            int z = 0;
            int w = 0;
             
            boolean getp = false;
            boolean getq = false;
            for(int i = 1; i < 150; i++) {
                int flag = flag(i);
                if(p <= flag && !getp) {
                    x = i - (flag - p);
                    y = flag - p + 1;
                    getp = true;
                }
                if(q <= flag && !getq) {
                    z = i - (flag - q);
                    w = flag - q + 1;
                    getq = true;
                }
                if(getp && getq)
                    break;
            }
             
            int starx = x + z;
            int stary = y + w;
            int result = 0;
            if(stary == 1)
                result = flag(starx);
            else
                result = flag(starx) + (starx + stary - 2) * (starx + stary - 1) / 2 - starx * (starx - 1) / 2;
            sb.append(result).append('\n');
        }
        System.out.print(sb);
    }
    static int flag(int i) {
        return i * (i + 1) / 2;
    }
}
반응형

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

[SWEA] 13428 : 숫자 조작  (0) 2023.05.12
[SWEA] 3282 : 0/1 Knapsack  (0) 2023.05.11
[SWEA] 1209 : Sum  (0) 2023.05.08
[SWEA] 1208 : Flatten  (0) 2023.05.08
[SWEA] 3499 : 퍼펙트셔플  (0) 2023.05.07