[LeetCode] 2327. Number of People Aware of a Secret
·
Algorithm
문제 비밀을 알고 있는 사람의 수를 구하는 문제이다. 총 일 수인 n, 비밀을 알게 된 사람은 delay 일이 지나고 나서부터 다른 사람에게 비밀을 말할 수 있고, forget일이 지난 후 이 비밀을 까먹게 된다. 마지막 n일이 끝나고 나서 아는 사람의 수를 구하는 문제인데, 수가 너무 커질 수도 있어 결과는 modulo인 109 + 7로 나눈 나머지로 반환한다. 풀이class Solution: def peopleAwareOfSecret(self, n: int, delay: int, forget: int) -> int: Mod = 10 ** 9 + 7 #비밀을 알고 있는 사람들의 수를 저장, secret[n]은 n번째 날에 비밀을 알고 있는 사람 수 secre..
[LeetCode] 92 - Reverse Linked List 2
·
Algorithm
문제 문제를 보면 링크드 리스트의 헤드가 주어지고, left와 right가 int값으로 주어진다. left~right 인덱스 사이의 노드들을 reverse 해서 결과 리스트를 반환하면 된다. 나는 문제를 너무 대충 봤나보다.. 처음에 left와 right가 왼쪽과 오른쪽 노드의 값인줄 알고 그 값 사이에 있는 노드를 찾아 앞뒤를 reverse한 링크드리스트를 반환하는 코드를 생각하다가 3시간을 날렸다.. 틀렸던 풀이Definition for singly-linked list.class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: ..
[LeetCode] 649 - Dota2 Senate
·
Algorithm
문제 문제 제목이 익숙한 게임이어서 선택했는데, 문제의 길이가 너무 길어서 해석에 많은 시간이 걸렸다. 문제를 해석해보자면 도타2 세계관에서 펼쳐지는 Radiant 와 Dire 진영간의 게임을 진행하는 코드를 구현하는 것이다. R과 D로 이루어진 문자열 senate가 주어짐 ex) RDD, RDRD 각 문자는 각 진영의 의원을 뜻한다 → R : Radiant , D : Dire라운드 방식으로 진행, 앞에서부터 차례대로 행동라운드마다 다른 의원 한명을 투표하지 못하게 만든다자기 진영의 의원만 남았으면 즉시 승리 선언위의 순서로 진행되는데, 라운드는 계속 반복되고, 끝까지 가면 처음으로 되돌아가며, 모든 의원이 자기 진영이 이기도록 최적의 전략을 사용한다고 할 때, 이기는 진영을 반환하는 문제이다. 풀이 ..
[LeetCode] 155 - Min Stack
·
Algorithm
문제 스택을 구현하는 간단한 문제이다. 스택만을 구현하는 것은 간단하지만 스택에 들어있는 요소들의 최소값을 반환하는 메소드가 추가되어있어 이를 추가하는게 관건인 문제이다. 풀이(1)class MinStack: def __init__(self): self.stack = [] #스택의 기능을 할 리스트 선언 def push(self, val: int) -> None: self.stack.append(val) #append() 이용하여 스택에 추가 def pop(self) -> None: if self.stack : #스택에 요소가 있어야 pop이 가능하므로 return self.stack.pop() def top(self..
[LeetCode] 141 - Linked List Cycle
·
Algorithm
문제 링크드 리스트(Linked List)에서 사이클이 있는지 확인하는 문제인데, tail 노드가 링크드 리스트 어딘가에 연결되어 있으면(이미 지나온 노드를 다시 만나면) True를 반환하고, 그렇지 않다면 False를 반환한다. 위의 문제에 example에 있는 그림에서는 마지막 노드인 -4에서 2로 돌아오므로, 사이클이 있어서 True를 반환한다. 풀이 먼저 방문한적이 있는 노드를 기록하기 위해서 set()함수를 이용해 집합 자료형으로 정의-> 링크드 리스트를 노드 하나씩 나아가며 집합과 비교해 이미 방문했던 적이 있는 노드인지 확인-> 이미 visit set에 있는 노드를 만나게 되면, 사이클이 있는 것이므로 True 반환-> 끝까지 None이면(while 문이 종료되었을 때)는 사이클이 없는 것이..
[LeetCode] 387 - First Unique Character in a String
·
Algorithm
문제 s라는 문자열이 주어졌을때, 한번만 나오는 문자 중 제일 왼쪽에 있는(첫번째의) 문자의 인덱스를 반환하며, 한 번만 나오는 문자가 없는 경우에는 -1을 반환하는 문제이다. 풀이 문자열을 받아서 문자 하나씩 반복하여 매칭되는 문자가 있을 때에는 문자의 수를 카운팅하게 하였고, 새로운 문자가 추가될 경우에는 1로 초기화 하여 키-값 방식의 딕셔너리로 만들었고, 이후 첫 번째로 한번만 나오는 문자의 인덱스를 반환하기 위해서 while문을 활용하여 cnt의 값이 1일 경우에 return문으로 while문을 빠져나오게 하였다.class Solution: def firstUniqChar(self, s: str) -> int: cnt = {} # 문자당 count를 딕셔너리로 저장, cnt..