데이터 꿈나무

[백준-23899] Python 알고리즘 수업 - 선택 정렬 5 본문

Activity/Algorithm

[백준-23899] Python 알고리즘 수업 - 선택 정렬 5

ye_ju 2025. 3. 12. 15:23

기록해두면 좋을 알고리즘 문제를 회고하면서, 더 기억에 담고자 글을 작성하게 되었습니다.😊


회고 및 느낀점
  • 금방 풀 수 있을 것 같다고 느껴졌는데, 고민하는데 시간이 조금 더 걸렸다. 
  • 배열 a와 배열 b가 처음부터 같은 리스트일 수도 있다. 이것이 나중에 생각이 나서 맨 앞쪽에 추가했다.
  • 마지막 원소부터 인덱스 1의 원소까지 반복문을 돌려야 하는 문제였다.
  • 그리고 최댓값의 인덱스를 구했어야 했다. '리스트.index(값)' 으로 구해야 하는 것도 생각이 나지 않아, 방법을 검색해봤다.
  • 처음에는 인덱스로만 값을 비교(현재 원소가 인덱스와 같은지 비교)하는 것을 활용하지 않았었다.
  • 그러다가 생각이 꼬여서 다시 처음부터 생각했다. 그랬더니 이런 방법으로 풀면 됐었구나..! 라는 것을 깨달았다. 
  • 'a[last], a[max_idx] = a[max_idx], a[last]' 이렇게 값을 교환하는 방식도 순간적으로 생각이 나질 않았다. (tmp로 넣어서 하는 방법을 먼저 생각했었다.)

총평

  • 오랜만에 푸는 문제라서 헷갈리는 부분이 많았다. 
  • 알고리즘 문제는 정말 꾸준히 풀어봐야 하는 것 같다고 생각이 들었다.
  • 문제의 로직과 감을 익히는 것이 내 목표이다!! 아자자!!

문제

https://www.acmicpc.net/problem/23899

 

코드

### 인덱스로만 비교!!! ###

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

if a == b:
    print(1)
    exit()

# 배열 a의 마지막 원소부터 시작(N부터 인덱스 1까지)
for last in range(n-1, 0, -1):  
    # 배열 시작부터 현재 원소(last)부까지 최댓값 인덱스 찾기
    max_idx = a.index(max(a[:last+1]))

    # 현재 원소(last)인덱스가 최댓값 인덱스와 같지 않다면, 교환한다.
    if last != max_idx:
        a[last], a[max_idx] = a[max_idx], a[last]
        
        # 한번 교환할 때마다 배열 b와 같은지 비교 
        # 같으면 1을 출력하고 종료.
        if a == b:
            print(1)
            exit()  # 프로그램 전체 즉시 종료
        # (다르면, 계속 진행)

# 끝까지 진행했는데 같은게 없었으면 0을 출력
print(0)
Comments