LeetCode 1823 solution

LeetCode  1823 solution

problem

There are n friends that are playing a game. The friends are sitting in a circle and are numbered from 1 to n in clockwise order. More formally, moving clockwise from the ith friend brings you to the (i+1)th friend for 1 <= i < n, and moving clockwise from the nth friend brings you to the 1st friend.

The rules of the game are as follows:

  1. Start at the 1st friend.
  2. Count the next k friends in the clockwise direction including the friend you started at. The counting wraps around the circle and may count some friends more than once.
  3. The last friend you counted leaves the circle and loses the game.
  4. If there is still more than one friend in the circle, go back to step 2 starting from the friend immediately clockwise of the friend who just lost and repeat.
  5. Else, the last friend in the circle wins the game.

Given the number of friends, n, and an integer k, return the winner of the game.

python

from collections import deque
class Solution:
    def findTheWinner(self, n: int, k: int) -> int:
        l = deque([x for x in range(1,n+1)])
        if len(l) == 1:
            return l[0]
        else:
            while len(l) > 1:
                l.rotate(-(k-1))
                l.popleft()
            return l[0]

원형 큐에서는 역시나 deque 사용하는 것이 속이 편하다. 다른 것은 확인할 것이 없으나 중요한 것은 l.rotate(+), l.rotate(-)의 차이는 알아놓아야 한다. + 일 경우에는 오른쪽으로 회전한다. 즉 l.appendlef(l.pop())과 같은 식으로 행동하게 된다. 반면에 - 일 경우에는 l.append(l.popleft())처럼 왼쪽으로 회전하게 된다.

deque를 사용하는 것의 가장 큰 이유는 0-index에 뭐를 놓을지를 편하게 하려는 것이다. popleft()라는 다른 자료구조에 비하면 굉장히 시간복잡도에서 우위를 가져올 수 있는 특징 때문에 이것을 이용하는 것이 유리하다. 해당 문제에서는 회전을 주어진 횟수만큼 하다가 마지막에 popleft를 해당 경우에 하기 위해서 deque를 사용하였다.

Read more

airflow 구성하고 vscode로 코딩하기

맥에서 했으면 훨씬 구성이 쉬웠겠지만, 그리고 poetry로 했으면 훨씬 쉬웠겠지만 워낙 규모가 있는 라이브러리이다 보니 과정이 어려워 다른 참조들을 보면서 따라했다. 기본적으로 poetry랑 쓰기 어려운 이유는 airflow 내부의 라이브러리에 따라 poetry가 버전을 참조하지 못해서 에러가 나는 경우가 존재한다고 한다. 또한 하나의 문제는 mac에서는 그냥 리눅스가 존재하지만 윈도우에서 하려면 윈도우용 linux인

[Json] dump vs dumps

json은 javascript object notation의 줄임말로 웹 어플리케이션에서 구조화된 데이터를 표현하기 위한 string 기반의 포맷이다. 서버에서 클라인트로 데이터를 전송하여 표현하거나, 그 반대로 클라이언트에서 서버로 보내는 경우들에 사용된다. javascript 객체 문법과 굉장히 유사하지만 워낙에 범용성이 넓게 설계되어 있어서 다른 언어들에도 많이 사용된다. 기본적으로 python 에는 json 이 내장 모듈이다. 바로 import json해주면