동혁이는 나무 조각을 5개 가지고 있다. 나무 조각에는 1부터 5까지 숫자 중 하나가 쓰여져 있다.
또, 모든 숫자는 다섯 조각 중 하나에만 쓰여 있다.동혁이는 나무 조각을 다음과 같은 과정을 거쳐서 1, 2, 3, 4, 5 순서로 만들려고 한다.
- 첫 번째 조각의 수가 두 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
- 두 번째 조각의 수가 세 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
- 세 번째 조각의 수가 네 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
- 네 번째 조각의 수가 다섯 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
- 만약 순서가 1, 2, 3, 4, 5 순서가 아니라면 1 단계로 다시 간다.
처음 조각의 순서가 주어졌을 때, 위치를 바꿀 때 마다 조각의 순서를 출력하는 프로그램을 작성하시오.
📌 문제 탐색하기
우리가 문제를 이해해가는 과정을 작성하시면 됩니다.
- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정
- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정
- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정 등을 작성해주시면 됩니다.
알고리즘 선택
- 인접한 두 원소를 비교하여 리스트의 위치를 교환해주는 과정을 반복해야하는데, 이때 생각난 알고리즘인 버블 정렬을 선택했다.
- 버블정렬의 시간 복잡도는 최소 O(n), 최대 O(n^2) 이 될 수 있지만, input의 원소 개수가 5개로 적은 숫자이기 때문에 버블 정렬을 해도 상관없다고 생각했다. (input list의 크기가 커질수록 성능은 떨어질 수 있다.)
📌코드 설계하기
위의 문제 탐색하기에서 고민한 과정을 토대로 문제 풀이에 대한 실마리를 잡으셨을 것 같습니다.
이제 문제 풀이를 본격적으로 하기 전, 이 문제를 풀기 위한 로드맵을 그려보겠습니다.
어떤 순서로 코드를 작성해야 할지, 어떤 함수들을 작성해야 할지 등을 작성해주시면 됩니다.
처음에는 어려울 수 있지만, 문제를 풀기 전 미리 지도를 그린다라는 생각으로 적어나가 보시면 좋을 것 같습니다 :)
- 나무조각 원소를 리스트로 받는다.
- 정렬을 위해 input 값을 정수로 변환한다.
- 리스트 처음부터 시작해서 다음 원소와 비교한다.
만약 앞의 원소가 뒤의 원소보다 크다면 기존의 리스트에서 두 원소의 위치를 바꿔준다. - 만약 정렬이 되지 않았다면 ([1,2,3,4,5] 순이 아니라면), 정렬이 될때까지 반복한다. (while문 사용)
📌 시도 회차 수정 사항 (Optional)
- 무문별하게 “맞았습니다”가 나올때 까지 수정하는 형태의 문제 풀이를 반복하면 , 내가 어떤 실수를 해서 해당 문제를 틀렸는지 모르게 됩니다.
- 틀렸습니다를 받았다면 왜 틀렸는지 고민해보고 , 어떻게 수정할 수 있는지 고민하는 과정을 작성해주시면 됩니다.
- 위에 내가 세울 설계에서 어떤 부분이 틀렸는지도 함께 점검해보세요
- 한번에 맞출수도 있기 때문에 이 칸은 Optional입니다.
📌정답 코드
def sort_pieces(pieces):
for idx in range(len(pieces)-1): # 다음 원소와 비교하기 때문에 리스트 길이이에서 -1
# 인접한 pieces 원소끼리 비교해서 idx번째의 원소가 idx+1번째의 원소보다 크다면 리스트 원소 자체를 바꾸기
if pieces[idx] > pieces[idx+1]:
pieces[idx], pieces[idx+1] = pieces[idx+1], pieces[idx]
print(*pieces)
# 나무조각 원소 받기
numbers = input().split()
# 정렬을 위해 숫자로 변경
numbers = [int(num) for num in numbers]
# 순서가 정답과 일치할때까지 진행 : while문 사용
while numbers != sorted(numbers):
sort_pieces(numbers)
반응형
'Study > Algorithm' 카테고리의 다른 글
[코테 챌린지] 8일차. 빙고 (0) | 2024.08.12 |
---|---|
[코테 챌린지] 7일차. 덩치 (0) | 2024.08.11 |
[코테 챌린지] 4일차. 생일 (0) | 2024.08.08 |
[코테 챌린지] 3일차. 단어 정렬 (0) | 2024.08.07 |
[코테 챌린지] 2일차. 나이순 정렬 (0) | 2024.08.06 |