practivceAlgorithm 570

[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

[Programmers][Python] KAKAO 2018 프렌즈 4블록

자주나오는 유형. 규칙에따라 블록 부수고 중력작용. def bomb_block(b, m, n): block = set() for i in range(m - 1): for j in range(n - 1): if b[i][j] and b[i][j] == b[i][j + 1] == b[i + 1][j] == b[i + 1][j + 1]: for dx, dy in [(0, 0), (1, 0), (0, 1), (1, 1)]: nx, ny = i + dx, j + dy block.add((nx, ny)) if not block: return 0, 0 for x, y in block: b[x][y] = 0 new_board = [[0] * n for _ in range(m)] for j in range(n): idx..

[Programmers][Python] KAKAO 2018 뉴스클러스터링

처음푼줄 알았는데 예전에 풀었었다.. 교집합, 합집합으로 간단히 풀린다. def make_set(s): a = set() for i in range(len(s) - 1): now = s[i:i+2] if now.isalpha(): while now in a: now += '1' a.add(now) return a def solution(str1, str2): str1, str2 = str1.lower(), str2.lower() a = make_set(str1) b = make_set(str2) if not a | b: return 65536 return len(a & b) * 65536 // len(a | b)

[백준][Python][2021 하반기 삼성 코딩테스트] 23291 어항정리

좀 무식하게 푼 느낌이 없잖아 있습니다. 달팽이 거꾸로 파고들면서 그렸습니다. 빈칸은 -1로 표기 빈칸 없을때와 빈칸이 있을 떄 1열로 펼치는 순서가 다릅니다. import sys input = sys.stdin.readline from collections import deque # 달팽이를 만든다. 시작좌표는 def make_snail(): row, col = n, n if n**2 - N >= n: col -= 1 matrix = [[0] * col for _ in range(row)] q = deque() q.append((row - 1, col - 1, 0)) blank_cnt = row * col - N start = N - 1 while q: x, y, d = q.popleft() matri..

[Programmers][Python] KAKAO 2019 실패율

정렬 후 upperbound, lowerbound로 분모는 전체 - lowerbound 분자는 upperbound - lowerbound 로 실패율 연산 후 최대힙으로 정렬 from bisect import bisect_left, bisect_right from heapq import heappush, heappop def solution(N, stages): answer = [] stages = sorted(stages) cnts = [] for i in range(1, N + 1): left = bisect_left(stages, i) right = bisect_right(stages, i) total = len(stages) - left failure_rate = (right - left) / to..

[Programmers][Python] KAKAO 2019 오픈채팅방

dictionary로 저장해서 최후에 저장된 값으로 출력조정했습니다. def solution(record): answer = [] users = {} for log in record: command, *user = log.split() if command == 'Enter' or command == 'Change': user_id, nickname = user users[user_id] = nickname for log in record: command, *user = log.split() if command == 'Enter': user_id, nickname = user answer.append(f'{users[user_id]}님이 들어왔습니다.') elif command == 'Leave': ans..

[Programmers][Python] Kakao 2019 후보키

조합 검사 중 조건을 만족할 시 조합의 부분조합을 구해 중복되는것이 있으면 세주지 않았습니다. from itertools import combinations def solution(relation): n = len(relation[0]) cnt = 0 checked = set() for i in range(1, n + 1): for comb in combinations([k for k in range(n)], i): dicts = set() tmp = [] for row in relation: tmp.append(''.join(row[each] for each in comb)) flag = 0 for c in tmp: if flag: break if c not in dicts: dicts.add(c) e..