문제
코드
My answer
import sys
input=sys.stdin.readline
n=int(input())
stack1,stack2=[],[]
# push하는 리스트, 정답과 비교할 최종리스트
answer,tmp=[],[]
# 입력받는수열, +-저장하는 리스트
index=0
for i in range(n):
answer.append(int(input()))
for i in range(n):
stack1.append(i+1)
tmp.append('+')
for j in range(len(stack1)-1,-1,-1):
if(stack1[j]==answer[index]):
tmp.append('-')
a=stack1.pop()
stack2.append(a)
index+=1
else:break
if(stack2==answer):
print(*tmp)
else:
print("NO")
import sys
input=sys.stdin.readline
n=int(input())
target=[int(input()) for _ in range(n)]
stack1=[i for i in range(n,0,-1)]
stack2=[0]
answer=[]
for i in target:
while(1):
if(stack2[-1]!=i and stack1!=[]):
stack2.append(stack1.pop())
answer.append('+')
elif(stack2[-1]==i):
stack2.pop()
answer.append('-')
break
else:
print("NO")
exit()
for i in answer:print(i)
Another answer
n = int(input())
s = []
op = []
count = 1
temp = True
for i in range(n):
num = int(input())
while count <= num:
s.append(count)
op.append('+')
count += 1
if s[-1] == num:
s.pop()
op.append('-')
else:
temp = False
if temp == False:
print('NO')
else:
for i in op:
print(i)
풀이
우선 문제이해하는데 시간이 오래걸렸다. 맨처음에는 입력받은 수열을 오름차순으로 정렬하는 문제인줄 알았는데, 그게 아니라 순서대로 1~n까지 입력되는 숫자들을 pop과 push를 적당히 번갈아가면서 사용하여 입력받은 수열로 만드는 것이었다. 문제를 좀 간단하게 적어줬으면 하는.. 아무튼 이제 내 코드를 설명해보겠다.
1. 만들고자 하는 수열을 answer이라는 리스트에 저장한다.
2. 1~n까지의 반복문을 만든다
3. 우선 stack1이라는 배열에 push하고, tmp라는 배열에 push를 의미하는 +를 추가한다.
4. stack1의 뒤에서부터 answer의 첫부분부터 비교하면서 같으면 stack1의 원소를 pop하여 stack2에 push하고 tmp에 -기호를 추가한다. 다르면 다음 숫자로 넘어간다.
ex) 문제 기본예시대로 answer=[4,3,6,8,7,5,2,1]일 때 우선 1부터 push하여 stack1=[1,2,3,4] tmp=[+,+,+,+] 까진 그냥 돌아가고 stack1의 마지막원소 4가 answer[0]이랑 같으므로 pop하고 -기호추가하고 또 3도 answer[1]이랑 같으므로 또 pop 그다음 2는 answer[2]=6과 다르므로 종료
5.위 과정을 반복하고 마지막 입력이 종료된후에 stack2와 answer리스트를 비교해서 같으면 부호리스트인 tmp를 출력하고 다르면 no를 출력
나는 이렇게 만들고자 하는 수열을 미리 저장하고 내가 직접 만들어가면서 비교했는데, another answer의 코드는 만들고자 하는 수열을 하나씩 입력받으면서 바로바로 적당하게 숫자를 저장해나갔다. 둘다 맞는 방법이지만 내 코드는 배열을 여러개를 쓰는 면에서 메모리를 조금더 잡아먹지 않을까 생각이 든다. 잘 모르겠다면 댓글을 달아주세여
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #3986- 좋은 단어 (0) | 2022.01.19 |
---|---|
[Python] 백준 #4949- 균형잡힌 세상 (0) | 2022.01.19 |
[Python] 백준 #2164- 카드 2 (0) | 2022.01.19 |
[Python] 백준 #18258 - 큐 2 (0) | 2022.01.19 |
[Python] 백준 #1059- 좋은 구간 (0) | 2022.01.19 |