Back/Algorithm

    [JavaScript] Queue

    기존에 Queue에 대해 shift, pop등 자바스크립트에선 배열로 구현해서 자주 가져왔는데, 알고리즘을 하다보니, Queue를 활용해야하는데, 자바스크립트에서 shift는 배열의 순서를 전부 재정렬해야하기 때문에, 시간복잡도가 O(n)이다. 데이터가 적으면 상관없겠지만, 큐의 자료구조를 시간복잡도에 맞게 활용하고 싶은 경우엔 O(1)이 나와야한다. 처음엔 {} 에 키밸류로 넣는 구조로 구현 했지만, 링크드리스트를 활용한 예제가 괜찮아서, 내가 쓸 것들로 만들어봤다. 알고보니 npm에 있었다. 아놔ㅠ class Node { constructor(data) { this.data = data; this.next = null; } } class Queue { constructor() { this.first ..

    백준 1904 01타일 파이썬

    백준 1904 01타일 파이썬 www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net n = int(input()) # 전체를 창고화 하기 save = [0] * 1000000 # n이 1이면 어차피 1밖에 못옴 # n이 2면 어차피 00 이나 , 11 밖에 못 옴 save[1] = 1 save[2] = 2 # 1,2를 앞에서 고정헀으니 3부터 돌아감 for i in range(3, n+1): # i번쨰의 경우의 수는 i-1번째와 i-2번째 경우의수를 합한 것과 같다. ..

    백준 1065 한수 파이썬

    백준 1065 한수 파이썬 www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net n = int(input()) han = 0 for i in range(1, n + 1): if i < 100: han += 1 else: ns = list(map(int, str(i))) print(ns) if ns[0] - ns[1] == ns[1] - ns[2]: han += 1 print(han) 1 ~ 100 까지는 비교할 숫자가 각 자릿수 밖에 없기 때문에, 모두 한수다. fo..

    프로그래머스 카카오 인형 뽑기 파이썬

    프로그래머스 카카오 인형 뽑기 def solution(board, moves): box = [] count = 0 for i in moves: for j in range(len(board)): if board[j][i - 1] != 0: box.append(board[j][i - 1]) board[j][i - 1] = 0 break stack = [] while box: if not stack: stack.append(box[0]) box.pop(0) elif stack[-1] != box[0]: stack.append(box.pop(0)) else: stack.pop(-1) box.pop(0) count += 2 return count 마지막에 모든 테스트 10개 다 통과했는데 1개가 자꾸 런타임에러 ..

    백준 10870 피보나치수5 파이썬

    백준 10870 피보나치수5 파이썬 def fibonacci(num): if num 2를 리턴한다.

    Python 백준 1436 영화감독

    Python 백준 1436 영화감독 www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net n = int(input()) name = 666 cnt = 0 while (True): if "666" in str(name): cnt += 1 if cnt == n: # cnt = 3 print(name); break name += 1 if문을 타는데, cnt를 더해줘서 666이 667이 되는 순간은 666이 아니니 if문을 안타고 name을 타서 계속 +1을 해주다가 ..

    Python 백준 2108 통계학

    Python 백준 2108 통계학 www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net import sys from collections import Counter import math input = sys.stdin.readline n = int(input()) nums_list = [] for i in range(n): nums = int(input()) nums_list.append(nums) a = sum(nums_list) / len(nums_list) ar = round(a) print(..

    파이썬 알고리즘 백준 2609

    파이썬 알고리즘 백준 2609 https://www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net import sys input = sys.stdin.readline num_list = list(map(int, input().split())) # 여기에 num_list = num_list2 이런식으로 해버리면 # 동일한 메모리값을 가지기 떄문에 num_list가 바뀐만큼 num_list2도 바뀐다. num_list2 = num_list[:] # [:] 말고 copy()도 가능함. num_list.sort() num_list2.so..