문제
[1차원 젠가]
풀러 가기
n개의 층으로 이루어진 1차원 젠가의 상태가 주어집니다.
각 층마다 1개의 블럭이 놓여져 있고, 각 블럭에는 1에서 100 사이의 숫자가 하나씩 적혀있습니다.
이 때 2번에 걸쳐 특정 구간의 블럭들을 빼는 작업을 진행하려 합니다.
처음에 위에서부터 2번째 블럭에서 4번째 블럭까지 블럭을 빼게 된다면, 남은 블럭은 중력에 의해 떨어지게 되어 다음과 같이 블럭이 남게 됩니다.
그 다음에는 2번째 블럭만 빼게 된다면, 다음과 같이 블럭이 남게 됩니다.
특정 구간의 블럭을 두 번 빼는 과정을 거친 이후의 결과를 출력하는 프로그램을 작성해보세요.
입력 형식
첫 번째 줄에는 처음 놓여있는 블럭의 수를 의미하는 n이 주어집니다.
두 번째 줄부터는 n개의 줄에 걸쳐 맨 위에서부터 맨 아래까지 순서대로 각 층에 놓여있는 블럭에 적혀있는 숫자가 주어집니다.
그 다음 줄에는 첫 번째로 제거할 블럭의 정보를 나타내는 (s1, e1) 값이 공백을 사이에 두고 주어집니다. (s1 ≤ e1) 이는 위에서부터 s1번째 부터 e1번째까지의 블럭을 뺀다는 것을 의미합니다.
마지막 줄에는 두 번째로 제거할 블럭의 정보를 나타내는 (s2, e2) 값이 공백을 사이에 두고 주어집니다. (s2 ≤ e2) 이는 위에서부터 s2번째 부터 e2번째까지의 블럭을 뺀다는 것을 의미합니다.
해당 구간에 놓인 블럭을 빼는 것이 불가능한 입력은 주어지지 않는다고 가정해도 좋습니다.
- 2 ≤ n ≤ 100
출력 형식
두 번의 블록 빼기 작업을 진행한 이후의 결과를 출력합니다.
첫 번째 줄에는 남은 블록의 개수를 출력합니다.
그 다음 번째 줄 부터는 한 줄에 하나씩 위에서부터 남은 블록에 적힌 숫자들을 순서대로 출력합니다
Constraints:
시간 제한: 1000ms
메모리 제한: 80MB
입출력 예제
입력:
6
1
2
3
1
1
5
2 4
2 2
출력:
2
1
5
입력:
6
1
2
3
1
1
5
2 4
1 3
출력:
0
풀이과정
1) 입력값 받기
- 위의 배열을 눕혀줘서 생각한다
end_of_array = int(input())
numbers = [
int(input())
for _ in range(n)
]
2) 지우는 매서드 생성
- 지우고자하는 부분만큼을 없앰
def cut_array(start_idx, end_idx):
global end_of_array
cut_len = end_idx - start_idx + 1;
for i in range(end_idx + 1, end_of_array):
numbers[i - cut_len] = numbers[i]
end_of_array -= cut_len
3) 이 과정을 두 번 반복
# 두 번에 걸쳐 지우는 과정을 반복합니다.
for _ in range(2):
s, e = tuple(map(int, input().split()))
# [s, e] 구간을 삭제합니다.
cut_array(s - 1, e - 1)
4) 출력
print(end_of_array)
for i in range(end_of_array):
print(numbers[i])
구현
# 변수 선언 및 입력
n = int(input())
numbers = [
int(input())
for _ in range(n)
]
end_of_array = n
# 입력 배열에서 지우고자 하는 부분 수열을 삭제합니다.
def cut_array(start_idx, end_idx):
global end_of_array
cut_len = end_idx - start_idx + 1;
for i in range(end_idx + 1, end_of_array):
numbers[i - cut_len] = numbers[i]
end_of_array -= cut_len
# 두 번에 걸쳐 지우는 과정을 반복합니다.
for _ in range(2):
s, e = tuple(map(int, input().split()))
# [s, e] 구간을 삭제합니다.
cut_array(s - 1, e - 1)
# 출력:
print(end_of_array)
for i in range(end_of_array):
print(numbers[i])
결과
쨔쨘