#1874

zzwwoonn·2022년 5월 24일
0

Algorithm

목록 보기
32/71

문제

풀이 과정

나름 쉽게? 시간 얼마 안들이고 푼거 같다. 다른 정답 코드들 보면서 건질거만 건지자.

내가 짠 코드

from collections import deque


resultList = deque()
inputDeque = deque()

N = int(input())

for i in range(N):
    resultList.append(int(input()))

answer = []

for i in range(1, N+1):
    # print(i, " push ")
    inputDeque.append(i)
    answer.append("+")
    while(inputDeque):
        if inputDeque[-1] == resultList[0]:
            # print(inputDeque[-1] , " pop ")
            inputDeque.pop()
            resultList.popleft()
            answer.append("-")
            
        else:
            break
if inputDeque:
    print("NO") 
    # print("다음 원소")
else:
    print(*answer)

다른 정답 코드

n = int(input())
count = 0
stack = []
result = []
no_message=True

for i in range(0,n):
    x = int(input())

    while count < x:
      count += 1
      stack.append(count)
      result.append("+")

    if stack[-1]==x:
        stack.pop()
        result.append("-")
    else:
        no_message = False
        exit(0) #a clean exit without any errors / problems

if no_message==False:
    print("NO")
else:
    print("\n".join(result))
  1. 나는 반복문을 다 돌고 나왔는데도(1부터 N까지 했는데도) 스택에 숫자가 남아있으면 아직 못빠져나간거니까 NO 를 프린트 해줬는데 다른 정답 코드에서는 no_message 라는 변수를 두고 T/F 로 판별해줬다.
  2. 다른 정답 코드에서는 최종 정답 배열을 출력할 때 join 함수를 써줬지만 나는 알고 있다. * 를 쓰면 모든 게 깔끔하다는 걸. 저 분한테도 가르쳐 주고 싶다.
  3. 다른 정답 코드에서는 list를 써줬지만 나는 deque를 썼다. push 와 pop 연산만 한다면 속도의 측면에서 deque가 훨씬 빠르기 때문이다.
  4. exit(0)을 왜 써줬는 지 모르겠다.

  1. break = 루프 탈출 / 중단
    for과 while 문법에서 제어 흐름을 벗어나기 위해 사용됨.
    루프 이후에 등장하는 코드를 계속 실행함.
    if문은 반복문이 아니라 조건 충족 시 1번만 실행되는 코드이므로 해당 없음.
for i in range(1, 100): # 1부터 99까지 증가하면서 99번 반복
    if i % 2 == 0:      # i를 2로 나누었을 때 나머지가 0이면 (짝수)
        break           # 반복문 탈출
    print(i, end = ' ')
    
# 실행 결과: 1
  1. continue
    break와 유사
    단 제어 흐름은 유지, 코드 실행만 건너뜀.
for i in range(1, 100): # 1부터 99까지 증가하면서 99번 반복
    if i % 2 == 0:      # i를 2로 나누었을 때 나머지가 0이면 (짝수)
        continue        # 아래 코드를 실행하지 않고 건너뜀
    print(i, end = ' ')
    
# 실행 결과: 1 3 5 7 ... (생략) 95 97 99
  1. return = 함수 탈출 또는 인클루드 탈출
    함수 안에서 쓰이면 함수 실행을 종료하고, 그 함수를 호출했던 지점으로 돌아가서 계속 실행함.
    함수 밖에서 쓰이면 상위 파일(현재 파일을 인클루드 했던 파일)로 돌아가서 계속 실행함.
    함수 밖인 데다 인클루드 한 것도 없으면 그냥 종료된다. 즉 exit과 동일한 효과가 됨.
  1. exit(), die() = 무조건 종료
    프로그램이 강제로 종료된다.

0개의 댓글