카드 짝 맞추기 (순열 permutations, BFS, DFS)
·
Coding Test/programmers
""" 1,2,3 짝을 맞춰야하는데 123,132,231,213,312,324 어떤 순서로 맞추는게 빠른지 -> 순열 구해서 인덱스 dfs 123도 어떤 1로 먼저 가야되는지 -> 2가지 경우 bfs 최솟값 출력 """ from collections import defaultdict, deque from itertools import permutations from copy import deepcopy def bfs(board, start, end): if start==end: return 0 q, visit = deque([[start[0], start[1], 0]]), {start} while q: # BFS x, y, c = q.popleft() for dx, dy in [(0,1),(0,-1),(..
뉴스 클러스터링 (문자열 리스트 합집합, 교집합, 중복 허용 다중집합)
·
Coding Test/programmers
from collections import Counter def solution(str1, str2): answer = 0 str1,str2=str1.upper(), str2.upper() a=[] for i in range(1,len(str1)): if str1[i-1].isalpha() and str1[i].isalpha(): a.append(str1[i-1]+str1[i]) b=[] for i in range(1,len(str2)): if str2[i-1].isalpha() and str2[i].isalpha(): b.append(str2[i-1]+str2[i]) if len(a)==len(b)==0: return 65536 a = Counter(a) b = Counter(b) c = list((a..
다트 게임 (구현)
·
Coding Test/programmers
def solution(dartResult): n='' temp=[] for i in range(len(dartResult)): x = dartResult[i] if x.isdecimal(): n+=x elif x.isalpha(): j=1 if x=='D': j=2 elif x=='T': j=3 temp.append(int(n)**j) n='' else: if x=='*': if len(temp)>1: temp[-2]=temp[-2]*2 temp[-1]=temp[-1]*2 elif x=='#': temp[-1]=temp[-1]*(-1) return sum(temp)
압축 (ascii_uppercase, 알파벳 딕셔너리)
·
Coding Test/programmers
from string import ascii_uppercase def solution(msg): answer = [] c = [i for i in range(1,27)] a= dict(zip(ascii_uppercase,c)) w='' for x in msg: w+=x if w not in a: a[w]=len(a)+1 answer.append(a[w[:-1]]) w = w[-1] answer.append(a[w]) return answer
실패율 (list.count() 함수)
·
Coding Test/programmers
def solution(N, stages): result = {} a = len(stages) for i in range(1,N+1): if a != 0: cnt = stages.count(i) # stages에서 i의 개수 result[i] = cnt/a a-=cnt else: result[i] = 0 return sorted(result, key=lambda x: result[x], reverse=True) def solution(N, stages): answer = [] a = [0] * (N+1) for x in stages: a[x - 1] += 1 b = {} for i in range(N): if sum(a[i:]) != 0: b[i+1]=a[i]/sum(a[i:]) else: b[i+1]=..
괄호변환 (문자열, 구현)
·
Coding Test/programmers
""" p는 '(' 와 ')' 로만 이루어진 문자열이며 길이는 2 이상 1,000 이하인 짝수입니다. 문자열 p를 이루는 '(' 와 ')' 의 개수는 항상 같습니다. """ def solution(p): if p=='': # 1 return p r=True c=0 for i in range(len(p)): # 2 if p[i]=='(': c-=1 else: c+=1 if c>0: # 순서 올바르지않음 r=False if c==0: if r: # 3 return p[:i+1]+solution(p[i+1:]) else: # 4 return '('+solution(p[i+1:])+')'+''.join(list(map(lambda x:'(' if x==')' else ')',p[1:i]) )) def r(w):..