<백준 문제풀이: 9461번> 파이썬 - 파도반 수열 이것도 간단한 문제였다. 피보나치 수열인데 조금만 다른 피보나치 수열이라 생각하면 된다. 런타임 에러가 뜬 풀이 import sys T = int(sys.stdin.readline()) a,b,c,d,e = 1, 1, 1, 2, 2 first_nums = [a,b,c,d,e] def new_series(n): if n 알고리즘 테스트/백준 문제풀이 및 해설 2020. 12. 15. 15:35
<프로그래머스 문제풀이: 올바른 괄호> Level 2 - 파이썬 간단해 보이는 괄호 문제이다. 어디서 본 적이 있는 듯한 문제인데 기억이 안난다(백준에서 본 것 같기도 하고...) 시간 초과가 뜬 풀이 처음에는 while문으로 풀었는데 효율성 테스트 1,2번에서 계속 시간초과가 뜬다. def solution(s): while True: temp = s s = s.replace('()', '') if s == '': return True if temp == s: return False아마도 while문 때문에 그런듯 하다. 원래 이 코드의 취지는, s 문자열 안에 있는 ()를 빈 문자열로 대체해주고, 미리 정의 해놨던 temp 와 s 가 같으면 그 뜻은 while문안에서 더 이상 ()이 발견이 안된다는 뜻인데, 이 때 temp.. 알고리즘 테스트/프로그래머스 문제풀이 및 해설 2020. 12. 14. 16:51
<Hackerrank 문제풀이: 파이썬> Zipped! 파이썬의 내장함수인 zip() 함수를 이용하는 문제이다. import sys N, M = map(int, sys.stdin.readline().split()) scores = [] for i in range(M): scores += [(map(float, sys.stdin.readline().split()))] for j in zip(*scores): print("%.1f" %(sum(j)/len(j)))처음에 어떻게 하나의 리스트 안에 있는 각각의 리스트들을 zip으로 구현하나 싶었는데, 이는 문제 설명에 나와있었다. zip(*scores) 를 사용하면 됐다. 알고리즘 테스트/Hackerrank 문제풀이 및 해설 2020. 12. 14. 15:38
<백준 문제풀이: 15651번> 파이썬 - N과 M (3) 이번에는 저번 문제랑도 비슷한 것 같지만, 이번에는 모든 경우의 수를 출력하는 것이 목표인 문제였다. import sys N, M = map(int, sys.stdin.readline().split()) check_list = [False]*N output = [] def solve(depth, N, M): if depth == M: print(' '.join([str(x) for x in output])) return for i in range(N): output.append(i+1) solve(depth+1, N, M) output.pop() solve(0, N, M)모든 경우의 수를 출력하는 것은 생각외로 쉽다. check_list[i]=True 인것을 만들어주지 않으면 된다. 이렇게.. 알고리즘 테스트/백준 문제풀이 및 해설 2020. 12. 14. 00:39
<Hackerrank 문제풀이: 파이썬> Re.split() 간단한 문제였는데, re.compile 과는 매우 다른 방식이어서 조금 애먹었다. regex_pattern = r"[.,]+" import re print("\n".join(re.split(regex_pattern, input()))) 여기서 re.split()은 어떤 패턴으로 스플릿 시킬것인지를 기준으로 패턴을 만들어야 한다. 따라서 r".,"+를 사용해야 한다. 알고리즘 테스트/Hackerrank 문제풀이 및 해설 2020. 12. 13. 13:26
<프로그래머스 문제풀이: [해시] 전화번호 목록> Level 2 - 파이썬 해시를 이용하여 푸는 문제라고 되어있는데, 해시가 무엇인지 아직 정확히 모르므로, 내가 생각한 방식으로 풀었다. def solution(phone_book): for i in range(len(phone_book)): for j in range(len(phone_book)): if i!= j: if phone_book[i]+phone_book[j][len(phone_book[i]):] == phone_book[j]: return False break else: return True효율성도 나쁘지 않고, 정확성도 다 맞는 풀이 방법이라 다른 사람의 풀이를 한번 보기로 했다. 다른 사람의 풀이 프로그래머스에서 가장 많은 좋아요를 받은 문제풀이이다 def solution(phoneBook): phoneBook.. 알고리즘 테스트/프로그래머스 문제풀이 및 해설 2020. 12. 13. 13:01
<백준 문제풀이: 15650번> 파이썬 - N과 M(2) 이번에도 백트래킹 문제였는데, itertools.permutations의 방법을 사용하지 않고 dfs 방식을 이용하느라 조금 어려웠다. import sys N, M = map(int, sys.stdin.readline().split()) check_list = [False]*N output = [] def dfs(depth, N, M): if depth == M: print(' '.join([str(x) for x in output])) return for i in range(N): if check_list[i]: continue check_list[i] = True output.append(i+1) dfs(depth+1, N, M) output.pop() for j in range(i+1.. 알고리즘 테스트/백준 문제풀이 및 해설 2020. 12. 13. 00:39
<프로그래머스 문제풀이: [정렬] H-Index> Level 2 - 파이썬 문제의 의미를 파악하는데 시간을 조금 보냈던 것 같다. def solution(citations): citations.sort() LENGTH = len(citations) MAX_NUM = 0 for i in range(max(citations)+1): COUNT = 0 for j in range(LENGTH): if i = i: MAX_NUM = i return MAX_NUM하지만 의미를 파악하니까 쉽게 풀렸다. 우선 citations 배열을 순서대로 정렬하고, 그 배열의 가장 큰 숫자에 대하여 for문을 구현한다. 0부터 가장 큰 숫자까지 각각의 숫자 i에 대하여, 해당 i보다 크거나 같은 숫자가 있으면 COUNT에 추가한다. 이후, 그 i에 대하여, COUNT가 해당 i보다 크다면, MAX_NUM.. 알고리즘 테스트/프로그래머스 문제풀이 및 해설 2020. 12. 12. 21:12