해당 문제를 확인하시고 싶으면 아래 링크를 통해 확인해주세요!
https://www.acmicpc.net/problem/15787
이 문제에서 핵심은 문제를 잘 이해하고 3번명령과 4번명령 로직을 잘 구현하는 것
이라고 생각한다.
크게 어렵지 않았던 문제였던 것 같다.
"""
백준 15787 (S2): 기차가 어둠을 헤치고 은하수를
https://www.acmicpc.net/problem/15787
"""
n, m = map(int, input().split()) # n: 기차 수, m: 명령 수
trains = [[0] * 20 for _ in range(n)] # 각 기차마다 20개 좌석 할당
for i in range(m):
command = list(map(int, input().split())) # 명령 입력받음
if command[0] == 1: # 1번 명령
trainNumber = command[1] - 1 # 기차 번호
seatNumber = command[2] - 1 # 좌석 번호
if trains[trainNumber][seatNumber] == 0: # 좌석이 비어있으면 입석 처리
trains[trainNumber][seatNumber] = 1
elif command[0] == 2: # 2번 명령
trainNumber = command[1] - 1 # 기차 번호
seatNumber = command[2] - 1 # 좌석 번호
if trains[trainNumber][seatNumber] == 1: # 좌석에 타있으면 하차 처리
trains[trainNumber][seatNumber] = 0
elif command[0] == 3: # 3번 명령
trainNumber = command[1] - 1
selectedTrain = trains[trainNumber]
temp = selectedTrain[0]
_temp = -1
for i in range(1, len(selectedTrain)):
_temp = selectedTrain[i] # 현재값 미리저장
selectedTrain[i] = temp # 이전 값 가져옴
temp = _temp
selectedTrain[0] = 0 # 맨 앞자리는 공석처리
trains[trainNumber] = selectedTrain
elif command[0] == 4: # 4번 명령
trainNumber = command[1] - 1
selectedTrain = trains[trainNumber]
temp = selectedTrain[len(selectedTrain) - 1]
_temp = -1
for i in range(len(selectedTrain)-2, -1, -1):
_temp = selectedTrain[i]
selectedTrain[i] = temp
temp = _temp
selectedTrain[len(selectedTrain)-1] = 0 # 맨 뒷자리 공석처리
trains[trainNumber] = selectedTrain
records = []
count = 0
for train in trains:
checkResult = False
if len(records) != 0:
for record in records:
if train == record:
checkResult = True
break
if checkResult == False:
count += 1
else:
count += 1
records.append(train)
print(count)
n, m = map(int, input().split()) # n: 기차 수, m: 명령 수
trains = [[0] * 20 for _ in range(n)] # 각 기차마다 20개 좌석 할당
for i in range(m):
command = list(map(int, input().split())) # 명령 입력받음
if command[0] == 1: # 1번 명령
trains[command[1]-1][command[2]-1] = 1 # 굳이 좌석이 비어있는지 확인할 필요 없음
elif command[0] == 2: # 2번 명령
trains[command[1]-1][command[2]-1] = 0 # 마찬가지로 좌석이 비어있지 않은지 확인할 필요 없음
elif command[0] == 3: # 3번 명령
"""
여기가 제일 어이가 없었음..
나는 임시값을 2개나 받았는데 생각해보니 거꾸로 하면 전혀 추가값이 필요없다는걸...
왜 이걸 생각하지 못했을까
"""
for j in range(19, 0, -1):
trains[command[1]-1][j] = trains[command[1]-1][j-1]
trains[command[1]-1][0] = 0
elif command[0] == 4: # 4번 명령
for j in range(19):
trains[command[1]-1][j] = trains[command[1]-1][j+1]
trains[command[1]-1][19] = 0
records = []
count = 0
for i in range(n):
if trains[i] not in records:
records.append(trains[i])
count += 1
print(count)