본문 바로가기

전체 글

(253)
자바스크립트)디스코드 클론 - 리액트 최근 회사 일 때문에 디스코드 클론 프로젝트를 모두 다 끝내지 못했다. 그리고 그저께부터 다시 작업에 돌입했는데 문제가 발생했다. 어떤 유저가 스트림 데이터 중 비디오를 껐다고 가정해보자. 그럼 다른유저와 그 유저를 이어주는 피어의 스트림을 다시 갈아끼워야 한다. 그러나 peer.js를 사용하면 하나의 피어(겉으로 보기엔)만 생성해 모든 유저의 피어를 관리한다. 때문에 마이크 볼륨이나 오디오 볼륨 등의 세세한 작업을 하는데 시간이 너무 많이 소요되는 것이 느껴졌다. 그래서 나는 peer.js를 사용하지 않고 RTCPeerConnection이라는 WebAPI를 사용하는 아주 기본적인 peer생성부터 다시 시작하기로 마음 먹었다. 자바스크립트에서 제공하는 WebAPI를 사용하는데에는 조금 어려움이 있었다. ..
파이썬) 일곱 난쟁이 - BOJ https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net from itertools import combinations arr = [] for _ in range(9): arr.append(int(input())) for talls in combinations(arr, 7): # 일곱 난쟁이의 키는 중복되지 않으니 조합으로 만들어준다 if sum(talls) == 100: answer = sorted(talls, key=lambda x: x) for i in a..
파이썬) 로봇 프로젝트 - BOJ https://www.acmicpc.net/problem/3649 import sys input = sys.stdin.readline while True: try: x = int(input()) * 10000000 n = int(input()) lego = [int(input()) for _ in range(n)] lego.sort() i, j = 0, n-1 flag = True while i < j: if lego[i] + lego[j] == x: print('yes %d %d' %(lego[i], lego[j])) flag = False break elif lego[i] + lego[j] < x: i += 1 else: j -= 1 if flag: print('danger') except: brea..
파이썬) 최대 힙 - BOJ https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 힙은 흔히 최소값을 출력하고 제거할 수 있다. 그렇다면 힙을 이용해 최대값을 출력할 수 있을까? 정답은 바로 아래 코드이다 import heapq import sys input = sys.stdin.readline n = int(input()) heap = [] for _ in range(n): x = int(input()) if x == 0: if not heap: pri..
파이썬) 회전초밥 - BOJ https://www.acmicpc.net/problem/2531 2531번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ www.acmicpc.net 이 문제는 꽤나 까다로웠다. 문제 이해와 풀이에는 무척 쉬웠지만 시간초과가 많이 발생하는 문제였다. 우선 처음 제출한 코드이다. from collections import deque import sys input = sys.stdin.readline n, d, k, c = map(int, input().split()) arr = [] for _ in rang..
파이썬) 비슷한 단어 - BOJ https://www.acmicpc.net/problem/2607 2607번: 비슷한 단어 첫째 줄에는 단어의 개수가 주어지고 둘째 줄부터는 한 줄에 하나씩 단어가 주어진다. 모든 단어는 영문 알파벳 대문자로 이루어져 있다. 단어의 개수는 100개 이하이며, 각 단어의 길이는 10 이 www.acmicpc.net from copy import deepcopy from collections import Counter n = int(input()) answer = 0 arr = [] for i in range(n): s = input() if i == 0: for j in s: arr.append(j) else: cop = deepcopy(arr) new = [j for j in s] cnt = 0 for ..
파이썬) 공유기 설치 - BOJ https://www.acmicpc.net/problem/2110 n, c = map(int, input().split()) arr = [] for i in range(n): arr.append(int(input())) arr.sort() start = 1 end = arr[-1] - arr[0] #최대거리 answer = 0 while start = last + mid: #거리가 mid만큼 떨어져잇다면 cnt += 1 last = arr[i] if cnt >= c: #설치한게 주어진 조건보다 작거나 같으면 #거리를 더 줄여도 됨 start = mid + 1 answer = mid else: #반대라면 거리를 좀 늘려야 됨 end = mid - 1 print(answer) 이 문제는 무엇을 mid로 둘지..
파이썬)체스판 위의 공 - BOJ(실패) https://www.acmicpc.net/problem/16957 16957번: 체스판 위의 공 크기가 R×C인 체스판이 있고, 체스판의 각 칸에는 정수가 하나씩 적혀있다. 체스판에 적혀있는 정수는 모두 서로 다르다. 체스판의 각 칸 위에 공을 하나씩 놓는다. 이제 공은 다음과 같은 규칙 www.acmicpc.net import sys input = sys.stdin.readline r, c = map(int, input().split()) arr = [] board = [] for _ in range(r): a = [0] * c board.append(a) arr.append(list(map(int, input().split()))) dx = [0, 0, 1, -1, -1, -1, 1, 1] dy =..
파이선) 개똥벌레 - BOJ https://www.acmicpc.net/problem/3020 3020번: 개똥벌레 개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 www.acmicpc.net n, h = map(int, input().split()) arr = [] top = [] bottom = [] for i in range(n): if i % 2 == 0: bottom.append(int(input())) else: top.append(int(input())) top.sort() bottom.sort() start = 1 end = h cnt = 0 min_v = int('inf')..
파이썬) 2048(Easy) - BOJ https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net from copy import deepcopy n = int(input()) result = 0 arr = [] for _ in range(n): arr.append(list(map(int, input().split()))) def check(board): mm = 0 for i in board: mm = max(max(i), mm) return mm def up(bo..
파이썬) 부등호 - BOJ https://www.acmicpc.net/problem/2529 2529번: 부등호 여러분은 제시된 부등호 관계를 만족하는 k+1 자리의 최대, 최소 정수를 첫째 줄과 둘째 줄에 각각 출력해야 한다. 단 아래 예(1)과 같이 첫 자리가 0인 경우도 정수에 포함되어야 한다. 모든 입력 www.acmicpc.net k = int(input()) arr = [i for i in range(10)] string = list(map(str, input().split())) result = [] def dfs(k, arr, string, current): if len(current) == k + 1: num_str = ''.join(map(str, current)) is_True = True for i in ra..
파이썬)사과 담기 게임 - BOJ https://www.acmicpc.net/problem/2828 n, m = map(int, input().split()) j = int(input()) left = 1 right = m cnt = 0 for _ in range(j): position = int(input()) if left > position: # 사과과 바구니보다 왼쪽에서 떨어지면 cnt += (left - position) # 사과가 바구니 가장 왼쪽에 오게 설정 left = position right = left + m - 1 elif right < position: # 사과가 바구니보다 오른쪽 cnt += position - right right = position left = right - m+1 print(cnt)
파이썬) 폴리오미노 -BOJ https://www.acmicpc.net/problem/1343 1343번: 폴리오미노 첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다. www.acmicpc.net s = input() s = s.replace('XXXX', '4') s = s.replace('XX', '2') # print(s) #XX와 XXXX를 바꾸면 s라는 문자열에 숫자가 생기는데 그 숫자가 4면 AAAA, 2라면 BB가 들어감 is_ = False for i in s: if i == 'X': #만약 s안에 X가 있다면 그것은 점(.)과 점 사이에 X숫자가 홀수라는 뜻이므로 전부 덮지 못함 print(-1) is_ = True break if is_ == False: s = s.repla..
파이썬) 컵홀더 - BOJ https://www.acmicpc.net/problem/2810 2810번: 컵홀더 첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다. www.acmicpc.net n = int(input()) s = input() s = s.replace('LL', 'L') new_s = '*' for i in range(len(s)): new_s += s[i] new_s += '*' s = new_s.replace('L', 'LL') # 여기까지 별표를 끼워넣는 과정 arr = [] for i in s: if i == '*': arr.append(False) else: arr.append(i) # arr라는 리스트에 컵홀더는 False로 나머지는 문자 그대로 넣음 cn..
파이썬) 게임을 만든 동준이 - BOJ https://www.acmicpc.net/problem/2847 2847번: 게임을 만든 동준이 학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어 www.acmicpc.net n = int(input()) arr = [] for i in range(n): arr.append(int(input())) cnt = 0 for i in range(n-1, 0, -1): if arr[i]