https://www.acmicpc.net/problem/1874
stack을 탈출하는 조건에서 고민했던 문제이다.
굳이 그럴필요는 없었지만.....
구현하기 나름인데 아직 문제를 꿰뚫는 황금 라인은 보이지 않는것 같다.
예전에 골프 만화를 읽었을때 어느정도 경지에 오르면 골프공이 홀에 빨려들어갈 황금 라인이 보인다더라. 알고리즘도 하다보면 그런 라인이 보이겠지????
언제나 그렇듯 정답 코드 먼저!!
n = int(input())
array = []
for i in range(n) :
array.append(int(input()))
number = 1
count = 1
answer = []
stack = []
for i in array :
while count <= i :
stack.append(number)
number += 1
count += 1
answer.append('+')
if stack[len(stack) - 1] == i :
stack.pop()
answer.append('-')
else :
answer = 'NO'
break
if answer == "NO" :
print(answer)
else :
print('\n'.join(answer))
- while문 안에서 접근 방식이 좋았던것 같다.
- 출력 순서의 값보다 같거나 작은 값들을 전부 넣어버리고 이후의 과정을 진행한다.
- 한번의 순회로 끝이 난다.
복잡했던 코드 && 방식
n = int(input())
array = []
for i in range(n) :
array.append(int(input()))
number = 2
index = 0
answer = ['+']
stack = [1]
while True:
if number > n + 1 :
break
if number == n + 1 and len(stack) == 0 :
break
if len(stack) != 0 and stack[len(stack) - 1] == array[index]:
index += 1
answer.append('-')
stack.pop()
else :
answer.append('+')
stack.append(number)
number += 1
if number > n + 1 :
print('NO')
else :
for i in answer :
print(i)
보이는가 while문 안에서 2개의 if문 조건 ㅠㅠ (while문 탈출....)
정답은 맞았지만 방식은 좋지 못한 것 같다.
쉽지 않다..
'알고리즘' 카테고리의 다른 글
가장 긴 증가하는 부분 수열[백준 11053] (0) | 2021.11.20 |
---|---|
랜선 자르기[백준 1654] (0) | 2021.11.20 |
프린터 큐[백준 1966] (0) | 2021.11.20 |
숫자 문자열과 영단어[2021 KAKAO BLIND] (0) | 2021.11.20 |
치킨 튀기기[제로베이스] (0) | 2021.11.14 |