[백준] 24061 알고리즘 수업 - 병합 정렬 2

2024. 7. 11. 16:02·코딩 테스트/알고리즘

문제

 

코드

의사 코드에 맞게 병합 정렬 코드를 구현하고 원소 교환 때마다 카운트를 한다.
카운트 값이 k와 같다면 교환한 원소의 값을 작은 값부터 출력하고 변경 횟수가 k보다 작다면 -1을 출력한다. 

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

public class _24061 {
    static int cnt = 0;
    public static void main(String [] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

        int[] a = new int[n];
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            a[i] = Integer.parseInt(st.nextToken());
        }

        merge_sort(a, 0, n-1, k);
        if (cnt == k) {
            for (int num : a) {
                System.out.print(num + " ");
            }
        }
        else {
            System.out.println(-1);
        }
    }

    public static void merge_sort(int[] a, int left, int right, int k) {
        if (left < right) {
            int mid = (left + right) / 2;
            merge_sort(a, left, mid, k);
            if (cnt == k) {
                return;
            }
            merge_sort(a, mid + 1, right, k);
            if (cnt == k) {
                return;
            }
            merge(a, left, mid, right, k);
            if (cnt == k) {
                return;
            }
        }
    }

    public static void merge(int[] a, int left, int mid, int right, int k) {
        int[] tmp = new int[right - left + 1];
        int i = left, j = mid + 1, t = 0;
        while (i <= mid && j <= right) {
            if (a[i] <= a[j]) {
                tmp[t++] = a[i++]; // tmp <- left
            }
            else { // a[i] > a[j]
                tmp[t++] = a[j++]; // tmp <- mid+1
            }
        }

        // 왼쪽 배열 부분이 남은 경우
        while (i <= mid) {
            tmp[t++] = a[i++];
        }
        // 오른쪽 배열 부분이 남은 경우
        while (j <= right) {
            tmp[t++] = a[j++];
        }
        i = left;
        t = 0;
        // 최종적으로 정렬된 배열을 a[]에 옮김
        while (i <= right) {
            a[i++] = tmp[t++];
            cnt++;
            if (cnt == k) {
                return;
            }
        }
    }
}

'코딩 테스트 > 알고리즘' 카테고리의 다른 글

[프로그래머스] 42840 모의고사 (Lv.1) - 완전 탐색(브루트 포스)  (1) 2024.07.14
[프로그래머스] 86491 최소직사각형 (Lv.1) - 완전 탐색  (0) 2024.07.13
[백준] 23881 알고리즘 수업 - 선택 정렬 1  (0) 2024.07.11
[백준] 23968 알고리즘 수업 - 버블 정렬 1(Bronze.1)  (0) 2024.07.10
[프로그래머스] 17686 [3차] 파일명 정렬 - 정렬(Arrays.sort())  (0) 2024.07.09
'코딩 테스트/알고리즘' 카테고리의 다른 글
  • [프로그래머스] 42840 모의고사 (Lv.1) - 완전 탐색(브루트 포스)
  • [프로그래머스] 86491 최소직사각형 (Lv.1) - 완전 탐색
  • [백준] 23881 알고리즘 수업 - 선택 정렬 1
  • [백준] 23968 알고리즘 수업 - 버블 정렬 1(Bronze.1)
토자맨
토자맨
  • 토자맨
    개발하는 토자맨
    토자맨
  • 전체
    오늘
    어제
    • 개발 공부
      • 코딩 테스트
        • 코드업 기초 100제
        • 백준
        • 99클럽
        • 자료구조
        • 알고리즘
      • Programming Language
        • 자바(JAVA)
      • Back-end
        • Spring
      • Front-end
        • html
        • css
      • DevOps
        • AWS
        • CI CD
        • Docker
        • 홈서버
        • Git
      • Computer Science
        • 자료구조
        • 알고리즘
        • 운영체제
        • OS,Network,DB,DesignPattern
      • 프로젝트
        • 웨이트 쇼핑몰
      • 공부 로드맵
        • 2학년 겨울방학
        • 3학년 2학기
        • 3학년 겨울방학
      • 일상
        • 기타 정보
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    백준 #이진탐색 #이분탐색
    백준 #dfs #알고리즘
    프로그래머스 #dfs
    프로그래머스 #dp
    스프링 #spring #스프링 컨테이너 #스프링 컨텍스트
    이진탐색 #이분탐색 #백준
    bfs #프로그래머스
    bfs #최단거리탐색 #프로그래머스
    dp #백준 #동적계획법
    티스토리챌린지
    스프링핵심원리 #김영한 #의존관계자동주입 #의존관계 자동 주입
    bfs #백준
    dfs #알고리즘
    git filter-branch #commit 수정 #commit
    백준 #dfs #11725번
    피보나치 수 #백준 #dp
    99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #til
    solid #객체지향설계원칙
    ec2 멈춤 #ec2 터짐 #ec2 ssh 연결 끊김 #ec2 끊김
    백준 #아기상어2 #bfs
    nvidia container toolkit #
    이진탐색 #이분탐색 #알고리즘
    dfs #백준
    백준 #dfs
    싱글톤 패턴 #싱글톤 컨테이너 #싱글톤 레지스트리 #싱글톤 객체 상태 #무상태 #stateless #유지상태 #staleful
    git filter-repo
    백준 #dp #동적계획법
    nvidia-docker #docker cuda #docker gpu #엔비디아 도커
    백준 #bfs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
토자맨
[백준] 24061 알고리즘 수업 - 병합 정렬 2
상단으로

티스토리툴바