문제요약
나의 코드 및 설명 (뒤에서부터 값 비교)
- 입력한 숫자들을 저장한 리스트의
제일 마지막 인덱스(i)와 그 앞의 인덱스부터 첫 번째 인덱스(j)까지 값을 비교하여, 마지막 인덱스(i)의 값이 더 작다면, 앞의 인덱스와 값을 바꿔준다. 모두 반복하게 된다면 첫 번째 반복에서, 제일 마지막 인덱스에 숫자 중 가장 큰 값이 위치하게 될 것이다. - 20개의 숫자이니까, 20번을 반복하게되면 오름차순으로 숫자를 정렬할 수 있게 된다.
n = int(input())
for _ in range(n):
num_list = list(map(int, input().split()))
test_case = num_list[0]
cnt = 0
#맨 뒤의 인덱스의 값과
for i in range(len(num_list)-1, 0, -1):
#맨 뒤의 바로 앞 인덱스부터 제일 앞 인덱스까지 값 비교
for j in range(i-1,0,-1):
if num_list[i] < num_list[j]:
num_list[i], num_list[j] = num_list[j], num_list[i]
cnt += 1
print(test_case,cnt)
다른 코드 및 설명 (앞에서부터 값 비교)
- 이것은 다른 분이 작성한 코드인데, 나와는 반대로 뒤의 인덱스 값들과 비교하여 뒤에 있는 값보다 앞의 값이 더 크다면 바꿔주도록 코드를 작성하였다. 이렇게 풀면 맞았다고 나온다..
n = int(input())
for _ in range(n):
num_list = list(map(int, input().split()))
test_case = num_list[0]
cnt = 0
for i in range(1, len(num_list)-1):
for j in range(i+1,len(num_list)): #뒤에 있는 숫자들 비교
if num_list[i] > num_list[j]:
num_list[i],num_list[j] = num_list[j],num_list[i]
cnt += 1
print(test_case, cnt)
피드백
간단한 문제처럼 보이지만 엄청 여러번 시도 끝에 문제를 해결할 수 있었다.
원래 처음에는 앞의 숫자부터 순차적으로(외부 for문) 숫자의 바로 앞 숫자부터 제일 첫 번째 숫자까지 역순으로(내부 for문) 으로 비교하려고 했으나 값이 이상하게 출력되었고, 결국 바로 앞의 숫자와 그 앞의 숫자를 비교해서 앞의 숫자가 더 크다면 위치를 서로 바꿔주고 카운트 하는 것으로 문제를 해결하려고 했으나, 입력 값 예제는 모두 정상적으로 출력되었지만 무엇 때문인지 계속 정답판정을 받지 못했다 .. 백준 질문 게시판에 도움을 요청했으나 아무도 답을 달아주지 않았다 .. 혹시 이전에 작성했던 코드가 잘못된 이유를 아시는 분 있으면 도와주세요 ㅠ.ㅠ
아무튼 뒤에서 부터 거꾸로 값을 비교하는 방법으로 문제를 해결했고, 오랜 시간 고민 끝에 내가 작성한 코드를 일부 수정하여 정답 판정을 받을 수 있어서 좋았다.
'Baekjoon > IM Level' 카테고리의 다른 글
[백준] 1966 프린터 큐 (실버3) / 큐 (0) | 2023.03.25 |
---|---|
[백준] 11866 파이썬 (실버5) / 큐, replace() : 문자열을 변경하는 함수 (0) | 2023.03.24 |
[백준] 1158 요세푸스 문제 (실버4) / 큐 (0) | 2023.03.24 |
[백준] 2491 수열 (실버4) / DP(다이나믹 프로그래밍) (0) | 2023.03.24 |
[백준] 10157 자리 배정 (실버4) (0) | 2023.03.24 |