한 걸음씩
[백준][python] 2947 나무 조각 본문
https://www.acmicpc.net/problem/2947
2947번: 나무 조각
첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.
www.acmicpc.net
풀이 과정 1
1. 5개의 정수를 공백으로 구분해서 입력을 받고
2. 뒷자리의 수가 앞의 자리 수 보다 크다면 자리를 바꾸는데 얼마나 반복해야 하는지 모르니까 while loop
3. range길이는 리스트 내 길이에서 -1
4. swap 함수를 사용해서 앞뒤 숫자 바꿀 수 있음
5. unpacking으로 출력함
6. 입력한 수와 12345가 같다면 break
num = list(map(int, input().split()))
N = [1, 2, 3, 4, 5]
while num != N:
for i in range(len(num)-1):
if num[i] > num[i + 1]:
num[i], num[i + 1] = num[i + 1], num[i]
print(*num)
if num == N:
break
풀이 과정 2
n = list(map(int, input().split()))
cnt = 0
while True:
if n != [1, 2, 3, 4, 5]:
if cnt == 4: # cnt가 4가 되면 index out of range
if n != [1, 2, 3, 4, 5]: # 다시 보니까 이 부분은 없어도 됨!
cnt = 0 # 그래서 0으로 초기화
if n[cnt] > n[cnt+1]: # 앞의 숫자가 더 크면
n[cnt], n[cnt+1] = n[cnt+1], n[cnt] # swap
print(*n)
elif n:
cnt += 1 # if문의 조건을 만족하지 못했을 때도 cnt수는 증가해야하니까
else:
break # n이 [1,2,3,4,5]와 같다면 while문 종료
리뷰
[첫 번째 풀이]
while loop을 사용해야 하고 swap도 하는 걸 알았는데 이걸 어떻게 반복시켜야 하는지 모르겠어서 헤매다가
다른 사람 코드 참고해 보니까 range에서 len함수로 길이를 세고 -1을 해주면 되는 거였다
# 틀린 풀이
import sys
input = sys.stdin.readline
num = list(map(int, input().split()))
N = [1, 2, 3, 4, 5]
while True:
for i in range(len(num)):
if i == 4:
i = 0
if num[i] > num[i+1]:
num[i], num[i+1] = num[i+1], num[i]
print(*num)
if num == N:
break
[두 번째 풀이]
if문을 3개 만들어서 i가 4가 되면 인덱스 에러 나니까 0으로 초기화시키고
다른 if문에서는 서로 값을 바꾸고 출력하고
또 다른 if문에서는 while 문 종료 시키는 방법으로 코드를 구성했는데
계속 시간 초과가 나서 sys import 했지만 그것도 아니었다...
range의 len 값에서 -1 하면 if문 하나 사라지고
마지막 if문은 for문과 동등한 위치에서 작성해야 하고
가장 중요한 건 while 조건이 True가 아니라 1, 2, 3, 4, 5 리스트 변수 새로 생성해서
서로 다를 경우가 참인 경우로 조건을 만들어 줘야 한다..
거의 다 풀었는데 중간중간에 디테일한 부분을 놓쳤다ㅠ
[세 번째 풀이]
세 번째 푸는 건데 index out of range 부분을 어떻게 처리할지 고민 많이 함..ㅎ
while문 사용한건 동일한데 이번에는 cnt라는 카운트 변수를 두고 풀었다
매번 풀 때마다 새롭다 ㅎ ㅎ...
'BOJ' 카테고리의 다른 글
[백준][python] 7785 회사에 있는 사람 ✅ (1) | 2023.01.24 |
---|---|
[백준][python] 9093 단어 뒤집기 (0) | 2023.01.24 |
[백준][python] 1110 더하기 사이클 ✅ (0) | 2023.01.24 |
[백준][python] 5622 다이얼 (0) | 2023.01.24 |
[백준][python] 10988 팰린드롬인지 확인하기 (0) | 2023.01.24 |