[백준] 7570번 줄 세우기
🔔 문제
대한 어린이집에 올해 입학한 어린이들이 놀이터에 한 줄로 서있다. 모든 어린이들에게는 입학할 때 주어진 번호가 있고 모두 옷에 번호표를 달고 있다. 그런데 어린이들은 아직 번호 순서대로 줄을 잘 서지 못하므로 선생님이 다음과 같은 방법을 사용해서 번호순서대로 줄을 세우려고 한다.
방법: 줄 서있는 어린이 중 한 명을 선택하여 제일 앞이나 제일 뒤로 보낸다.
위의 방법을 사용할 때 어린이가 이동해서 빈자리가 생기는 경우에는 빈자리의 뒤에 있는 어린이들이 한 걸음씩 앞으로 걸어와서 빈자리를 메꾼다.
예를 들어, 5명의 어린이들에게 1부터 5까지의 번호가 주어져 있고, 다음과 같은 순서로 줄 서있다고 하자.
5 2 4 1 3
위 방법을 이용해서 다음과 같이 번호순서대로 줄을 세울 수 있다.
- 1번 어린이를 제일 앞으로 보낸다. (5 2 4 1 3 → 1 5 2 4 3)
- 4번 어린이를 제일 뒤로 보낸다. (1 5 2 4 3 → 1 5 2 3 4)
- 5번 어린이를 제일 뒤로 보낸다. (1 5 2 3 4 → 1 2 3 4 5)
위의 예에서는 세 명의 어린이를 제일 앞이나 제일 뒤로 보내 번호순서대로 줄을 세웠다. 그리고 두 명 이하의 어린이를 제일 앞이나 제일 뒤로 보내는 방법으로는 번호순서대로 줄을 세울 수 없다. 그러므로 이 경우에는 최소한 세 명의 어린이를 이동하여야 번호순서대로 줄을 세울 수 있다.
이 문제는 처음에 줄서있는 상태에서 위 방법을 이용해서 번호순서대로 줄을 세울 때 앞이나 뒤로 보내는 어린이 수의 최솟값을 찾는 것이다.
입력
- 입력은 2 개의 줄로 이루어져 있다. 첫 줄에는 어린이 수를 나타내는 정수가 주어진다. 둘째 줄에는 처음에 줄서있는 어린이들의 번호가 차례대로 주어진다. 주어진 번호들 사이에는 공백이 하나씩 들어있다. 단, 어린이 수는 1이상 1,000,000이하의 정수로 제한되고, 어린이 수가 N이면 어린이들의 번호는 1부터 N까지의 정수이다.
출력
- 입력에서 주어진 어린이들의 줄에 대해 번호순서대로 줄을 세우기 위해 제일 앞이나 제일 뒤로 보내는 어린이 수의 최솟값을 출력해야 한다.
🎯 풀이방법
문제 해결 방법이 잘 생각이 안나서 다른 블로그 글을 참고했다.😢
다른 사람의 풀이 과정을 참고한 결과, 제일 앞이나 제일 뒤로 보내는 어린이수의 최솟값을 구하기 위해서 몇명의 어린이가 번호에 맞게 서있는지 구하고 전체 어린이 수에서 뺌으로써 구하였다.
예로 살펴보면, 입력값을 children에 저장하고, 인덱스를 맞추기 위해 처음에 0을 삽입해주면 children = [0,5,2,4,1,3]이 된다. 그리고 각 번호의 어린이가 몇 번째 자리에 있는지를 나타내기 위해 location 리스트를 만든다. location = [0,4,2,5,3,1] 이 리스트의 의미는 '해당 인덱스의 숫자가 몇번째 자리에 있는가'이다. 즉, location 리스트의 1번 인덱스 값이 4인것은 children의 숫자 1이 4번째 인덱스에 있다는 것이다. 이 location 리스트에서 각 원소가 인접한 다음 원소보다 작으면 더 작은 값이 더 앞에 있는 것이므로 이동할 필요가 없다. 그렇게 리스트를 순회하면서 이동할 필요가 없는 수를 증가시키고 전체 어린이 수와의 차이를 출력하면 된다.
💻 python code
n = int(input())
children = list(map(int, input().split()))
children.insert(0, 0)
location = [0 for _ in range(n+1)]
for x in range(1, n+1):
location[children[x]] = x
max_num = -1
count = 1
for i in range(1, n):
if location[i] < location[i+1]:
count += 1
if count > max_num:
max_num = max(max_num, count)
else:
count = 1
print(n - max_num)
Author And Source
이 문제에 관하여([백준] 7570번 줄 세우기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@subinmun1997/백준-7570번-줄-세우기-zg96d982저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)