데이터 꿈나무
[백준-23899] Python 알고리즘 수업 - 선택 정렬 5 본문
기록해두면 좋을 알고리즘 문제를 회고하면서, 더 기억에 담고자 글을 작성하게 되었습니다.😊
회고 및 느낀점
- 금방 풀 수 있을 것 같다고 느껴졌는데, 고민하는데 시간이 조금 더 걸렸다.
- 배열 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)'Activity > Algorithm' 카테고리의 다른 글
| [KT_코딩마스터스] 분리수거장 (python) (0) | 2024.09.21 |
|---|---|
| [Algorithm] 백준 10989번 수 정렬하기 3 (0) | 2024.07.28 |
| [Alforithm] 이코테_상하좌우 문제 (110p) (0) | 2024.05.22 |
| [프로그래머스] 콜라츠 추측_Python (0) | 2023.07.12 |
| [프로그래머스] 최댓값 만들기(2) (0) | 2023.02.22 |
Comments