분류 전체보기 720

[Programmers][Python] KAKAO 2018 N진수 게임

진법수로 변환할때 맨 앞부터 채울 생각을 했는데 다른 사람들 풀이보니 전부 뒷자리부터 채웠다.. 생각해보니 그렇게 해도 전혀 상관없는데 나는 무슨짓을 한건지.. def solution(n, t, m, p): answer = '' parse_table = {i: hex(i)[2:].upper() for i in range(16)} p -= 1 tmp = '0' num = 1 while len(tmp) = k: k *= n k //= n now = num while k: a = now // k tmp += parse_table[a] now -= a * k k //= n num += 1 for i in range(p, p + t * m, m): answer..

[Programmers][Python] KAKAO 2018 파일명 정렬

파일이름 뒤에 f를 붙혀 tail없는 예외를 없앤 후 head, number를 heap에 넣은 후 뽑아내며 정렬 from heapq import heappop, heappush def solution(files): answer = [] sort_arr = [] for pos, each_file in enumerate(files): tmp = each_file + 'f' flag = 0 for idx, char in enumerate(tmp): if not flag and char.isdigit(): start = idx flag = 1 elif flag and not char.isdigit(): end = idx break head, number = each_file[:start], each_file[s..

[자료구조] 그래프의 간선 리스트

인접 행렬 V^2개의 원소를 가진 2차원배열. 인접 리스트 V개의 연결리스트( 동적 배열 ) vector기반이라 느리다. 간선 번호 붙일 때 불편하다 ( 순회하기 힘들다. ) 간선 배열 #include #include using namespace std; typedef pair pint; #define x first #define y second const int maxv = 100000, maxe = 200000; pint edge[maxe]; // 배열의 각 주소는 (x, y) 튜플 페어를 가짐. int st[maxv]; // 간선을 정렬한 후, 각 점에서 시작하는 간선의 첫 인덱스 int v, e; int main() { // Input cin >> v >> e; for (int i=1; i> ed..

[자료구조 & 알고리즘] Hash 함수와 충돌 Map, Set, Table 구현체

Hash 데이터를 효율적으로 관리하기 위해, 임의의 길이 데이터를 고정된 길이의 데이터로 매핑하는 것. 해시함수를 구현하여 데이터값을 해시값으로 매핑시킨다. 내부적으로 array를 사용해 데이터를 저장. 데이터 고유의 인덱스로 key의 고유 숫자 값이 저장됨. 특정 데이터만의 고유한 위치이기 때문에 삽입 연산 시 다른 데이터 사이에 끼어들어나 삭제시 다른 데이터로 채울 필요가 없음. 즉 추가적인 비용이 없도록 만들어진 구조. Hash Table 해시 테이블은 로 데이터를 저장하는 자료 구조 중 하나이다. Key값에 해시 함수를 적용해 index를 생성하고, index를 활용하여 값을 저장, 검색 할 수 있다. Key값을 해싱하여 검색, 저장하므로 평균 시간 복잡도는 O(1)이다. (항상 O(1)이 아닌 ..

[Programmers][Python] KAKAO 2018 방금그곡

문제조건에는 E#없는데 이거 처리 안하면 27번테케 틀림..조심할것. parse_set = {'C#': 'a', 'D#': 'b', 'F#': 'c', 'G#': 'd', 'A#': 'e', 'E#': 'k'} def parse_scale(music): parsed = [] for idx in range(len(music)): if music[idx] == '#': parsed.append(parse_set[parsed.pop()+music[idx]]) else: parsed.append(music[idx]) return ''.join(parsed) def make_time(time): a, b = time.split(':') return int(a) * 60 + int(b) def solution(m,..

[Programmers][Python] KAKAO 2018 압축

idx하나씩 늘려주며 문자열 사전에 추가하고 -1한 글자의 사전값은 answer에 추가 def solution(msg): msg += '.' answer = [] dic = {chr(i + ord('A')): i + 1 for i in range(26)} idx, last_idx = 0, len(msg) - 1 new_hash = 27 while idx < last_idx: start = msg[idx] while idx < last_idx and start in dic: idx += 1 start += msg[idx] answer.append(dic[start[:-1]]) dic[start] = new_hash new_hash += 1 return answer

[객체지향] OOP와 객체지향 패턴, Grasp 패턴 정리

프로그래밍 문제를 분석해 문제를 해결하는 방법과 과정. (Problem Solving) 조직화하는 것을 '설계'라 함. 구조적 프로그래밍에서의 분할기준은 프로시저(절차, 함수). 절차지향과 차이점은 캡슐화, 다형성, 상속 지원, 데이터 접근 제한을 걸 수 있는지 여부. 효율적으로 하기 위한 방법론 중 하나가 객체지향. 알고리즘은 수학적인 풀이. 하지만 이로 모든 문제를 해결 할 수 없음. 객체지향은 어떤 문제를 잘게 나눠서 각각의 능동적인 주체로 만들기 위함. 잘게 나눈 객체들을 조합해 큰 문제를 해결하는 Bottom-Up 지향 큰 문제를 10개로 나눠 할당하고 각 주체가 자기가 맡은 책임에 대해 해결을 위해 '자율적'으로 노력하고 '협업'하기 위한 패러다임. 즉 객체지향에서 우리가 배워야 할 것은 '협..