[1377] 버블 소트 (정렬 인덱스, 안쪽 for문 실행 횟수, swap)

2023. 6. 6. 11:23·Coding Test/Sort
728x90
 

1377번: 버블 소트

첫째 줄에 N이 주어진다. N은 500,000보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 A[1]부터 A[N]까지 하나씩 주어진다. A에 들어있는 수는 1,000,000보다 작거나 같은 자연수 또는 0이다.

www.acmicpc.net

 

분석

  • 버블 정렬의 swap이 한 번도 일어나지 않은 루프가 언제인지 알아내는 문제
  • 버블정렬의 이중 for 문에서 안쪽 for 문 전체를 돌 때 swap이 일어나지 않았다 == 이미 모든 데이터가 정렬됐다
  •  N은 500,000보다 작거나 같은 자연수 : n^2불가
  • 안쪽 루프는 1에서 n-j까지 swap 수행, 특정 데이터가 안쪽 루프에서 swap의 왼쪽으로 이동할 수 있는 최대 거리가 1이므로 데이터의 정렬 전 인덱스와 정렬 수 인덱스를 비교해 왼쪽으로 가장 많이 이동한 값을 찾아서 해결
bool changed = false;
for (int i=1; i<=N+1; i++) {
    changed = false;
    for (int j=1; j<=N-i; j++) {
        if (A[j] > A[j+1]) {
            changed = true;
            swap(A[j], A[j+1]);
        }
    }
    if (changed == false) {
        cout << i << '\n';
        break;
    }
}

 

풀이

"""N은 배열의 크기이고, A는 정렬해야 하는 배열이다. 배열은 A[1]부터 사용한다.
버블소트 j for문에서 swap되지 않은 i찾기 : 전부 정렬 되었을 때의 i
N(1~500,000) n^2불가
"""
import sys
input=sys.stdin.readline

n=int(input())
a=[]
for i in range(n):
    a.append((int(input()),i))  # (val,idx)

soredA=sorted(a)
# print(a)
# print(soredA)

max=0
for i in range(n):
    if max<soredA[i][1]-i:
        max=soredA[i][1]-i

print(max+1)  # swap이 일어나지 않는 반복문 한번 더 실행됨으로 +1

 

 

 

 

728x90
저작자표시 비영리 변경금지
'Coding Test/Sort' 카테고리의 다른 글
  • [2751] 수 정렬하기2 (1 ≤ N ≤ 1,000,000, abs(K) ≤ 1,000,000, 병합 정렬)
  • [11004]K번째 수 (병합 정렬 풀이)
  • [11399] ATM (삽입 정렬 풀이, 그리디)
  • [1427] 소트인사이드 (내림차순 정렬, 선택정렬 풀이)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    덱
    알고리즘
    정렬
    재귀
    백준
    BFS
    자료구조
    그리디
    동적계획법
    파이썬
    프로그래머스
    이분탐색
    최단거리
    DP
    월간코드챌린지
    그래프
    Algorithm
    DFS
    다익스트라
    조합
    최대공약수
    큐
    트리
    구간합
    최소신장트리
    구현
    LIS
    스택
    플로이드워셜
    힙
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[1377] 버블 소트 (정렬 인덱스, 안쪽 for문 실행 횟수, swap)
상단으로

티스토리툴바