기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

알고리즘 - SWEA/D3

[SW expert Academy] SWEA 8673번 코딩 토너먼트1 자바(Java)

2023. 11. 5. 19:42

[D3] 코딩 토너먼트1 - 8673

문제 링크

성능 요약

메모리: 96,692 KB, 시간: 314 ms, 코드길이: 843 Bytes

제출 일자

2023-11-05 19:35

출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do

import java.util.*;
class Solution {
    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for(int tc = 1; tc <= T; tc++) {
            int k = (int)Math.pow(2,sc.nextInt());
            int sum = 0;
            Queue<Integer> q = new LinkedList<>();
            for(int i =0; i < k; i++){
                q.offer(sc.nextInt());
            }
            while( k != 1){
                for(int i = 0; i < k/2; i++){
                    int a = q.poll();
                    int b = q.poll();
                    int max = Math.max(a,b);
                    int min = Math.min(a,b);
                    q.offer(max);
                    sum += max - min;
                }
                k/= 2;
            }
            System.out.println("#" + tc + " " + sum);
        }
    }
}

 

배열을 이용해서도 풀이가 가능하다.

import java.util.*;
class Solution {
	public static void main(String args[]) throws Exception {
		Scanner sc = new Scanner(System.in);
 		int T = sc.nextInt();
		for(int tc = 1; tc <= T; tc++) {
            int k = (int)Math.pow(2,sc.nextInt());
            int [] a= new int[k];
            for(int i = 0; i < k; i++){
                a[i] = sc.nextInt();
            }
            int sum = 0;
            while( k > 0 ){
                for(int i = 0; i < k / 2; i++){
                    int num1 = a[i*2];
                    int num2 = a[i*2+1];
                    sum += Math.abs(num1 - num2);
                    a[i] = Math.max(num1, num2);
                }
                k /= 2;
            }
            System.out.println("#" + tc + " " + sum);
		}
	}
}

 

'알고리즘 - SWEA > D3' 카테고리의 다른 글

[SW expert Academy] SWEA 7102번 준홍이의 카드놀이 자바(Java)  (0) 2023.11.05
[SW expert Academy] SWEA 6958번 동철이의 프로그래밍 대회 자바(Java)  (0) 2023.11.05
[SW expert Academy] SWEA 4579번 세상의 모든 팰린드롬 2 자바(Java)  (0) 2023.11.05
[SW expert Academy] SWEA 5603번 건초더미 자바(Java)  (0) 2023.11.05
[SW expert Academy] SWEA 5162번 두가지 빵의 딜레마 자바(Java)  (0) 2023.11.05
    '알고리즘 - SWEA/D3' 카테고리의 다른 글
    • [SW expert Academy] SWEA 7102번 준홍이의 카드놀이 자바(Java)
    • [SW expert Academy] SWEA 6958번 동철이의 프로그래밍 대회 자바(Java)
    • [SW expert Academy] SWEA 4579번 세상의 모든 팰린드롬 2 자바(Java)
    • [SW expert Academy] SWEA 5603번 건초더미 자바(Java)
    기몽수
    기몽수

    티스토리툴바