[백준] 2798 블랙잭 N, M = map(int,input().split()) cards = list(map(int,input().split())) card_list = [(cards[x]+cards[y]+cards[z]) for x in range(len(cards)) \ for y in range(len(cards)) for z in range(len(cards)) if x < y < z] print(max([x for x in card_list if x STUDY/Algorithm 2021.01.30
[백준] 1339 단어 수학 N = int(input()) words = dict() for _ in range(N): word = input() len_word=len(word)# 가중치를 자리수로 두기 위한 값 for char in word:# ex) 'ABC' = 'A'=100, 'B'= 10 'C' =1 if not char in words: words[char] = 0 words[char] += 10**(len_word - 1) len_word -= 1 words=sorted(words.items(),key=lambda x: x[1], reverse=True)# 가중치를 값으로 정렬, 내림차순 result = 0 for i in range(len(words)):# 가중치가 가장 큰 값부터 차례대로 곱해서 더함 result .. STUDY/Algorithm 2021.01.30
[백준] 4673 셀프 넘버 self_num = [False]+[True]*10000 for number in range(1,10001): tmp = number + (number//10000) + (number//1000)%10 + (number//100)%10 + (number//10)%10 + (number) % 10 if tmp STUDY/Algorithm 2021.01.30
[백준] 1110 더하기 사이클 N = int(input()) cnt = 0 orig_N = N while True: if N < 10: N *= 11 else: tmp = (N//10) + (N%10) N = (N % 10)*10 + (tmp%10) cnt += 1 if N == orig_N: break print(cnt) 한자리수때문에 조금 구현하기 힘들었지만, 문제에 적힌 그대로 적은 코드이다. STUDY/Algorithm 2021.01.30
[백준] 1065 한수 # 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. # 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다. def ishansu(str_number): # 한, 두자리 수인 경우 무조건 등차수열 if len(str_number)== 1 or len(str_number)==2: return True # 세자리 수인 경우 tmp = [] for ch in str_number: tmp.append(int(ch)) if (tmp[0]-tmp[1]) == (tmp[1]-tmp[2]):# 각 자리가 등차수열? return True else: return False N = int(input()) result = 0 for i in range(1, N+1): if ishansu(s.. STUDY/Algorithm 2021.01.30
[백준] 1316. 그룹 단어 체커 n = int(input()) result=0 for case in range(n): word = input() chk_char = '' for ch in word: if ch not in chk_char: # chk에 없으면 추가 chk_char += ch else: # 있는경우에는 if ch != chk_char[-1]: # 이전값이랑 비교해서 다르면 멈춤 break else:# 문제 없이 끝나면 +1 result += 1 print(result) 타인의 코드를 보고 내 방식대로 작성한 알고리즘. 큰 틀은 바뀌지 않아서 내 코드는 아니다. 코드를 보고 느낀것은 정확하게 동작하는 알고리즘을 먼저 작성하는것이 가장 중요한것 같다. 답이 안나오면 어차피 틀리니까... 코드길이를 줄이던지 실행시간을 줄이는 .. STUDY/Algorithm 2021.01.29
[프로그래머스] LEVEL2 짝지어 제거하기, python3, 2017 팁스타운 def solution(s): if len(s) % 2: #홀수 경우는 불가능 return 0 list_s = list(s) stack = [] for i in range(len(s)): tmp = list_s.pop() if stack == []: stack.append(tmp) elif stack[-1] == tmp: stack.pop() elif stack[-1] != tmp: stack.append(tmp) if stack != []: return 0 return 1 위 코드는 타인의 코드를 보고 생각해보며 내 방식대로 적은 코드이다. 스택의 개념에 대해서는 알지만 어떻게 사용해야할지 잘 몰랐던 것 같다. 스택이 비었을때 추가하고, 스택에 값이 있을때 비교하는것... 앞으로는 제발 잊지 않았으면 .. STUDY/Algorithm 2021.01.28
[백준] 1003 피보나치 함수 T = int(input()) fibo_memoization = [0, 1,] for tc in range(T): N = int(input()) if N == 0: print(1, 0) continue try: print(fibo_memoization[N-1], fibo_memoization[N]) except: for i in range(2,N+1): fibo_memoization.append(fibo_memoization[-1]+fibo_memoization[-2]) print(fibo_memoization[N-1], fibo_memoization[N]) 0일 때, 0: 1번 호출 1: 0번 호출 STUDY/Algorithm 2021.01.28
[백준] 10250 ACM 호텔 # N번째 손님 => N//H +1 호, N % H 층 # 10 번째 손님 => 10//6 +1 = 2호, 4 층 # 72 번째 손님 => 72//30 +1 = 3호, 12 층 T = int(input()) # 테스트 데이터 개수 for i in range(T): H, W, N = map(int,input().split()) result = ((N % H) * 100) + ((N // H) + 1) if N % H !=0 else (H * 100) + (N // H) print(result) 나머지를 사용할땐 0인 케이스를 확인하자 STUDY/Algorithm 2021.01.28
[프로그래머스] LEVEL2 스킬트리, python3, Summer/Winter Coding(~2018) def solution(skill, skill_trees): answer = 0 for skill_tree in skill_trees: old_val = skill_tree.find(skill[0]) # 이전값과 비교하기 위한 변수. 처음 값은 skill의 첫 글자의 인덱스값 for sk in skill[1:]: val = skill_tree.find(sk) # val는 비교할 값의 인덱스 if old_val == -1: # 만약 old_val == -1 인 경우에는(스킬트리 내에 없음) if val != -1: # 다음값이 다 -1인 경우(스킬트리에 없는 경우)에만 진행 break # 하나의 값이 존재하면 불가능한 스킬트리 else: # old_val > -1 # 이전값이 스킬트리 내에 있고 if va.. STUDY/Algorithm 2021.01.28