[항해99 취업 리부트 코스 학습일지] 3주차 - 자료구조 & 알고리즘 학습 (스택, 큐, 덱)

eundore·2024년 4월 3일
0
post-thumbnail

- 오늘 진행된 강의에서 학습한 내용은 무엇인가요?

스택, 큐, 덱에 대해서 개념과 함수들에 대해서 배웠다.
양 끝을 조작하는 것이 아니라면 빠른 무작위 액세스를 위해서는 대신 리스트를 사용하는 것이 유리!

- 이번 주 진행된 팀 스터디에서 얻은 인사이트는 무엇인가요?

팀이 바뀌면서 팀원 반 이상이 변경되었다.
오늘 처음 스터디를 진행하였지만 꽤 물 흐르듯이 자연스럽게 진행이 되었다.
오늘도 팀 스터디를 통해서 새로운 내용들을 배울 수 있었다.

백준의 '풍성 터뜨리기' 문제에 많이 애를 먹었는데
deque의 rotate만 안다면 매우 쉽게 풀릴 문제였다...😭

# 주석 단 코드로 시도했으나 계속 실패하여 시간이 지체된 관계로 답안을 찾아봄.
# gpt로도 왜 실패했는지 물어봤으나 계속 이유를 못 찾음...

# -> 팀 스터디 이후 성환님이 반례 예제를 보여주셨고 index 계산식이 잘못됨.
# 단순히 index를 계산한 결과값만 방문을 했는지 체크를 했음.
# 하지만 현재 위치에서 다음 위치까지 가는 사이에 방문을 했다면 제외해야 함.
# 현재 계산식으로는 방문했던 값을 뛰어넘지 않고 포함해서 계산됨.
# 그럼 굳이 while 문을 사이에 넣어서 방문했는지 체크하는 것은 비효율적이라고 판단함.
# 따라서 애초에 계산식으로 푸는 문제가 아닌 듯.

#잘못 접근한 코드
import math

n = int(input())
balloons = list(map(int, input().split()))
visited = [False] * len(balloons)

answer = []
index = 0
is_forward = True

cnt = len(balloons)
while cnt > 0:

    if visited[index]:
        index = (index + (1 if is_forward else -1)) % len(balloons)
        continue

    visited[index] = True
    answer.append(index+1)
    cnt -= 1

    value = balloons[index]
    index = int(math.fmod((index + value), len(balloons)))
    is_forward = True if value > 0 else False

print(" ".join(map(str, answer)))


#정답 코드
import sys
from collections import deque

input = sys.stdin.readline

n = int(input())
paper = deque(list(enumerate(map(int, input().split()))))
poped = []

while paper:
    index, num = paper.popleft()
    poped.append(index + 1)
    if num > 0:
        paper.rotate(-(num-1))
    else:
        paper.rotate(-num)
print(*poped)

✅ 오늘의 TIL

# 1. deque의 rotate 메서드
# deque 내의 요소들을 주어진 수만큼 회전.
# 양수를 주면 오른쪽으로 회전하고, 음수를 주면 왼쪽으로 회전.

# 2. 파이썬의 내장 함수 any, all
# 어느 하나라도 True이므로 True 반환
print(any([False, True, False]))  # 출력: True
# 모든 값이 False이므로 False 반환
print(any([False, False, False]))  # 출력: False
# 모든 값이 True이므로 True 반환
print(all([True, True, True]))  # 출력: True
# 하나라도 False가 있으므로 False 반환
print(all([True, False, True]))  # 출력: False

# 3. 문자열에 있는 Python 표현식을 평가하여 해당 값을 반환하는 ast.literal_eval
import ast
# 문자열에 있는 Python 표현식을 평가하여 값을 반환
result = ast.literal_eval("[1, 2, 3]")
print(result)  # 출력: [1, 2, 3]
result = ast.literal_eval("{'a': 1, 'b': 2}")
print(result)  # 출력: {'a': 1, 'b': 2}


항해99 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.

0개의 댓글