2019/02(28)
-
2019.02.18) 백준 1912번 풀이 (PyPy3)
백준은 런타임에러나 틀린거 왜 틀렸는지 알려주면 좋겠다. 원래 알고리즘 푸는게 이런건가 내가 뭘틀렸는지 뭘 고쳐야하는지도 모르고 막연하게 코딩하는것이.. 1234567891011121314151617181920c = input()a = list(map(int, input().split(' '))) # 이거때문에 런타임에러로 고생if c == '1': print(a[0])else: # 최고 수 mx = a[0] + a[1] # 현재 합 n = 0 for i in a: n += i mx = mx if mx > n else n # 만약 합이 0아래면 다음부터 다시 합함 if n
2019.02.18 -
2019.02.17) 백준 9251번 풀이 (PyPy3)
lcs는 참 이해가 안되는 알고리즘이다. 다이나믹 프로그래밍은 맞는데 보통 머리로 이딴 알고리즘을 만드려고 했던 내가 한심했다. 도데체 왜 이렇게 작동되는진 모르겠지만 구현은 했다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051b = input()a = input()lcs = [[0 for i in b]]now = 0for i in range(len(a)): tmp = [0 for z in b] for j in range(len(b)): if a[i] == b[j]: # 맨 앞이 아니면 왼쪽 위에 있는 값에 +1 if not j == 0: tmp[j] = lcs[i][j-1] + 1 ..
2019.02.17 -
2019.02.16) 백준 9461번 풀이 (PyPy3)
1234567891011# 7번쨰 이상부터 i-1, i-5의 합이라는 규칙이 있다.# log 변수에 값을 저장해가며 계산한다.log = [1, 1, 1, 2, 2, 3] for i in range(int(input())): n = int(input()) # 만약 아직 탐색되지 않은 곳이면 만듦 for j in range(len(log), n+1): log.append(log[j-5] + log[j-1]) print(log[n-1]) Colored by Color Scriptercs
2019.02.16 -
2019.02.15) 백준 1463번 풀이 (PyPy3)
1초인줄 알고 어떻게 최적화할지 많이 고민하다 2초 시간제한을보고 아주 단순하게 예전에 나왔던 수를 모아 저장하는것으로 구현성공 1234567891011121314151617181920212223242526272829l = [[int(input())]]# 전에 나왔던건 기록할 필요가 없음his = set() # 1이 나올때까지 돌림while l[-1].count(1) == 0: tmp = list() for i in l[-1]: # 2로 나누어지고 예전에 나온적없으면 넣고 if i % 2 == 0: n = i // 2 if not n in his: his.add(n) tmp.append(n) # 3으로 나누어지고 예전에 나온적없으면 넣고 if i % 3 == 0: n = i // 3 if not n in..
2019.02.15 -
2019.02.14) 백준 2579번 풀이 (PyPy3)
다이나믹 프로그래밍은 반복하여 저장하는 도중 언제 어디서 필요없는 정보를 버리고 가볍게 하느냐가 관건이다. 1234567891011121314151617181920212223242526272829c = int(input())l = list() for i in range(c): # 역순으로 계산할거라 insert 사용 l.insert(0, int(input())) # 0,1,2번쨰 스텝인 현재 스텝 수를 저장r = [[0, l[0], 0]] for i in range(1, c): # 3번째 까지는 무조건 끝을 밟아야 하는 규칙때문에 수동으로 넣음 if i == 1: r.append([r[0][1], 0, r[0][1] + l[1]]) elif i == 2: r.append([r[1][2], r[1][0] ..
2019.02.14 -
2019.02.13) 백준 13241번 (PyPy3)
오늘은 조금 쉬어가는날.. 1234567891011121314151617_a, _b = map(int, input().split(' ')) a, b = (_a, _b) if _a > _b else (_b, _a) mi = b while a % b != 0: tmp = b b = a % b a = tmpelse: mi = b print((_a // mi) * _b) Colored by Color Scriptercs
2019.02.13 -
2019.02.12) 백준 1932번 풀이 (PyPy3)
다이나믹 프로그래밍은 단순히 과정을 저장? 하는것으로 푸는 느낌이다.123456789101112131415161718l = list()r = list()c = int(input()) for i in range(c): l.append(list(map(int, input().split(' ')))) r.append(l[0]) for i in range(1, c): tmp = [l[i][0] + r[i - 1][0]] for j in range(1, len(l[i]) - 1): tmp.append((r[i - 1][j - 1] if r[i - 1][j]
2019.02.12 -
2019.02.11) 백준 1149번 풀이 (PyPy3)
12345678910111213141516171819# 입력값l = list()# 합용l2 = list()for i in range(int(input())): l.append(list(map(int, input().split(' ')))) # 첫번째 합은 당연히 그대로l2.append(l[0]) for i in range(1, len(l)): l2.append(list()) # 이웃하지 않은 것들중 2개중 작은것을 더함 그걸 R스타트 G스타트 B스타트 다 나눠서 3갈래로 저장 l2[i].append(l2[i-1][2] + l[i][0] if l2[i-1][1] > l2[i-1][2] else l2[i-1][1] + l[i][0]) l2[i].append(l2[i - 1][0] + l[i][1] if l2..
2019.02.11 -
2019.02.10) 백준 1003번 풀이 (PyPy3)
계산값을 저장하고 풀어야 시간이 맞는다1234567891011121314151617# 계산한거 저장zero = [1, 0, 1]one = [0, 1, 1] def fibo(p0): l = len(zero) if l
2019.02.10 -
2019.02.09) 백준 1038번 풀이 (PyPy3)
시간초과가 10번은 뜬거같다 간단하게 모든정수 돌렸더니 1022를 넣어서 내 컴퓨터에서도 출력이 안됐다.그래서 좀 줄여서 오직 작아지는 수만 순회할수 있는 알고리즘을 만들었다.근데 100%에서 시간초과가 뜨는 것이다좀 화나서 1시간동안 고민하고 보니까 1~9까지를 연산을 안돌리고 그냥 바로 출력해주면 되더라12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758c = int(input()) # 9까진 그냥 입력값이 답(이거때문에 1시간 낭비함)if c
2019.02.09