본문 바로가기

분류 전체보기

(213)
[좌충우돌, 파이썬으로 자료구조 구현하기] 합이 0인 부분 배열 중 가장 긴 것 찾기 문제 양의 정수와 음의 정수의 배열이 있다. 합이 0인 부분 배열 중 가장 긴 배열의 길이를 구하라. 예시 입력: A = [15, -2, 2, -8, 1, 7, 10, 23] 출력: 5 (합이 0인 부분 배열은 -2 2 -8 1 7) 풀이 1. 이중 반복문 풀이 def largestSubArrayWithZero(arr): result = [0 for _ in range(len(arr))] if len(arr) == 1: return 1 for i,num in enumerate(arr): subArray = [num] for j in range(i+1,len(arr)): num2 = arr[j] subArray.append(num2) if sum(subArray) == 0: result[i] = len(s..
[좌충우돌, 파이썬으로 자료구조 구현하기] 문자열의 가장 먼저 나오는 유일한 문자 찾기 (hashTable) 문제 주어진 문자열에서 반복되지 않는 문자 중 가장 먼저 나오는 문자의 인덱스를 출력하라. 모든 문자가 중복되면, -1을 출력하라. 예시 입력: leetcode, 출력: 0 입력: loveleetcode, 출력: 2 입력: aabb, 출력 -1 풀이 1. 이중 반복문 풀이 현재 문자 뒤로 같은 문자가 있는지 확인하면서 문제를 푼다. 단, 'aabb'의 경우 2번째 'a'의 경우 위 논리에 어긋나기 때문에, 이미 중복확인한 문자는 로직을 건너 뛰도록 구현해야한다. def firstUniqueCharacter(str): result = [i for i in range(len(str))] checklist = [] for i,s in enumerate(str): if s in checklist: continu..
[좌충우돌, 파이썬으로 자료구조 구현하기] 해시 테이블 구현하기 파이썬으로 해시 테이블 구현하기 해시 테이블은 언어에 따라 해시맵, 사전 등으로 부른다. 해시 테이블은 key(키), value(값)으로 구성된 자료구조이다. 해시 함수란, 키를 매개변수로 사용하여 해시 테이블의 고유한 값을 반환하는 함수이다. 키를 해시함수에 넣으면 나오는 고유한 값을 인덱스로 사용하여 테이블에 값을 저장하거나 검색한다. 해시 테이블 기본 원리 key value "a" "apple" "b" "banana" "c" "cherry" 위와 같이 키와 값이 있을 때, 해시 테이블에 저장하는 방법을 알아보자. 해시함수는 아스키코드를 테이블의 크기(3)로 나눈 나머지를 구하는 함수이다. "a" 를 해시함수에 넣으면 -> hashFn(97 % 3) -> 1 "b" 를 해시함수에 넣으면 -> hash..
[좌충우돌, 파이썬으로 자료구조 구현하기] 숫자의 표현 문제 15는 다음과 같이 4가지로 표현할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution을 완성해 주세요. 풀이 1. 이중 반복문 풀이 def 숫자표현(n): count = 1 # 자기자신을 나타내는 방법 1개를 초기값으로 설정 for i in range(1,n//2+1): sum = i while sum < n: sum += i + 1 i += 1 if sum == n: count += 1 return count 1부터 주어진 수의 절반까지만 반복문을 순회한다. 해당 반복문 안에서 주어진 수 n보다 작을 때까지 연속되는 숫자..
[좌충우돌, 파이썬으로 자료구조 구현하기] 큐를 이용하여 이진수 만들기 문제 자연수 N이 주어졌을 때, 1부터 N까지의 이진수를 순서대로 출력하는 함수를 구현해라 풀이 1. 내장함수 이용 def generate_binary(n): for i in range(1, n+1): print(bin(i)[2:]) # 이진수에 0b가 붙으므로 슬라이싱으로 제거 bin() 내장함수는 정수형을 이진수 문자열로 반환한다. 문제 분석하기 >>> generate_binary(5) 1 10 11 100 101 2의 이진수와 3의 이진수는 1의 이진수에 0, 1을 붙인 것이다. 4의 이진수와 5의 이진수는 2의 이진수에 0, 1을 붙인 것이다... 그렇다면, 6과 7의 이진수는 3의 이진수에 0과 1을 붙인 것으로 예상할 수 있다. 앞서 사용한 이진수에 0과 1을 붙인 이진수가 나중에 사용된다. ..