목록분류 전체보기 (190)
거누의 개발노트
문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 예제 입력 3 4 7 10 예제 출력 7 44 274 작성한 코드 import itertools import sys N = int(sys.stdin.readline()) case = [int(sys.stdin.readline().strip()) for _ in r..
문제 2에서 9까지 숫자가 주어졌을 때 전화 번호로 조합 가능한 모든 문자를 출력하라. 입력 "23" 출력 ['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf'] 작성한 코드 def letterCombinations(digits: str) -> List[str]: if digits == '': return [] phone = [[],['a','b','c'],['d','e','f'],['g','h','i'],['j','k','l'],['m','n','o'],['p','q','r','s'],['t','u','v'],['w','x','y','z']] lst = [int(i) for i in digits] l = [phone[i-1] for i in lst] pro =..

해시테이블? 해시 테이블 또는 해시 맵은 키를 값에 맵핑할 수 있는 구조로 빠르게 데이터를 검색할 수 있는 자료구조이다. 해시 테이블은 각각의 Key값에 해시함수를 적용해 배열의 고유한 index를 생성하고, 이 index를 활용해 값을 저장하거나 검색하게 된다. 여기서 실제 값이 저장되는 장소를 버킷 또는 슬롯이라고 한다. 해시 테이블의 가장 큰 특징은 시간 복잡도가 O(1) 이라는 점이다. 덕분에 데이터에 양에 관계 없이 빠른 성능을 기대할 수 있다는 장점이 있다. 해시 함수? 해시함수는 임의의 길이의 데이터를 입력받아 일정한 길이의 비트열로 반환 시켜주는 함수이다. 입력값의 길이가 달라도 출력값은 언제나 고정된 길이로 반환한다. 동일한 값이 입력되면 언제나 동일한 출력값을 보장한다. ex) AFJQ..
문제 N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다. 예제 입력 5 4 1 5 2 3 5 1 3 7 9 5 예제 출력 1 1 0 0 1 작성한 코드 import sys n1 = int(sys.stdin.readline()) lst1=list(map(int, sys.stdin...
문제 상위 K번 이상 등장하는 요소를 추출하라. 입력 num = [1,1,1,2,2,3] k = 2 출력 [1,2] 작성한 코드 def topKFrequent1(nums: List[int], k: int) -> List[int]: count = list(collections.Counter(nums).most_common(k)) # k 이상의 최빈값 rtn = [] for i in range(len(count)): rtn.append(count[i][0]) return rtn 파이썬다운 방식 def topKFrequent2(nums: List[int], k: int) -> List[int]: return list(zip(*collections.Counter(nums).most_common(k)))[0] 리..
문제 중복 문자가 없는 가장 긴 부분 문자열의 길이를 리턴 입력 abcabcbb bbbbb pwwkew 출력 3 1 3 작성한 코드 def lengthOfLongestSubstring(s: str) -> int: used = {} max_length = 0 start = 0 for i, v in enumerate(s): if v in used and start
문제 jewels는 보석이며, stones은 갖고 있는 돌이다. stones에는 보석이 몇 개나 있을까? 대소문자는 구분한다. "가지고 있는 돌이있는데, 그 안에서 보석이 몇 개나 있는지 구하는 문제" 제한사항 - 리트코드 1 보석과 돌은 영문으로 되어 있음, 대소문자 구분 All the characters of jewels are unique. -> 보석은 중복되는 문자가 없다, 최대 26+26 = 52 입력 jewels = "aA" stones = "aAAbbbb" 출력 3 작성한 코드 def numJewelsInStones1(jewels: str, stones: str) -> int: cnt = 0 # 돌에있는 값들로 for문을 돌릴건데 for s in stones: # 그 값중에 보석안에 존재하는..
문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다. 예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중요도가 2 ..