Computer Science 136

BOJ 6064: 카잉 달력

오늘의 문제! 카잉 달력이다. 문제를 보자마자, 저번에 풀었던 문제 (https://www.acmicpc.net/problem/1476)와 굉장히 비슷하다고 느꼈다. 하지만, 절대 같지 않았다. 우선 오답코드부터 보자. n=int(input()) for i in range(n): n,m,ansX,ansY=map(int,input().split()) x=1 y=1 year=1 while True: if x==ansX and y==ansY: print(year) break if x==n and y==m: print(-1) break if x==n: x=1 else: x+=1 if y==m: y=1 else: y+=1 year+=1 이렇게 단순하게 하나하나 더하면서 구하면, 시간 초과가 뜨게 된다. 아쉽다....

html 1일차: 드디어 첫 시작

아직까지 c, java, python, 어셈블리 정도만 해봤었는데, 드디어 내 의지로 배우는 첫 번째 언어라고 할 수 있는 html!을 해보려고 한다. '생활코딩! HTML+CSS+자바스크립트'라는 책 으로 시작을 해보려고 한다. 근데 문제는, 여기서는 atom을 에디터로 쓴다. 하지만 옆에 있는 동기가 visual studio code로 쓰는 걸 추천해서, 이걸로 우선 연습해보려고 한다. 근데 정말 쉽고 재미있는 것 같다! 기본적으로 visual studio에서 html 파일 만들기부터 시작한다. 바탕화면에 새로운 폴더을 만들고, 그 이후에 vs code 왼쪽 상단에 있는 '파일'을 누르고, 방금 만든 폴더를 '폴더 열기'를 통해 만들어주면 된다. 그리고 그 이후에, 탐색기에서 '새 파일'을 선택해주면..

BOJ 3085: 사탕 게임

이제 지겨운 DP를 끝내고, 더욱 재밌어보이는(?) 브루트포스를 풀고 있다. 근데 어렵다...... 특히 구현하는 문제가 난이도가 높아보인다. 진짜 역대급이다. 왜이렇게 배열을 떠올리면서 문제를 푸는 것이 어려운지.... 다른 사람들의 코드를 보고 정리해서 써봤다. def check(arr): n=len(arr) answer=1 for i in range(n): count=1 for j in range(1,n): if arr[i][j]==arr[i][j-1]: count+=1 else: count=1 if count>answer: answer=count count=1 for j in range(1,n): if arr[j][i]==arr[j-1][i]: count+=1 else: count=1 if cou..

BOJ 1932: 정수 삼각형

다이내믹 프로그래밍 문제는 정말 많다....ㅠ 문제가 많은 만큼, 만들어 낼 수 있는 점화식도 정말 다양하고, 문제의 종류도 정말 많다. 그런 만큼, 더욱 열심히 문제를 풀어야겠다는 생각이 든다. n=int(input()) data=[] for i in range(n): data.append(list(map(int,input().split()))) dp=data dp[0]=data[0] for i in range(1,n): for j in range(i+1): if j==0: dp[i][0]=dp[i-1][0]+data[i][0] elif i==j: dp[i][j]=dp[i-1][j-1]+data[i][j] else: dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+data[i][j]..

BOJ 2156: 포도주 시식

오늘도 계속되는 dynamic programming! n=int(input()) data=[] for i in range(n): data.append(int(input())) dp=[0]*n dp[0]=data[0] if n>1: dp[1]=data[0]+data[1] if n>2: dp[2]=max(data[0]+data[2], data[1]+data[2], data[0]+data[1]) for i in range(3,n): dp[i]=max(dp[i-2]+data[i],dp[i-3]+data[i-1]+data[i],dp[i-1]) print(dp[n-1]) 이 문제에서는, 3번 연속으로 와인을 마시면 안된다. 그렇기에, 3개 이상의 와인이 시식 가능할 때, i-3 i-2 i-1 i i-3 i-2 i-..

BOJ 11057: 오르막 수 (+중복조합 야매)

하... 이 문제를 보고 참아버리지 못했다. 물론 지금 컴퓨터 공부를 하고 있지만, 수학적으로 문제를 봐버리고 나니 다른 해답으로 풀기가 싫어진다. 문제부터 보자. 이 문제를 보고 dynamic programming으로 풀까라는 생각이 1초정도 났지만, 바로 확률과 통계에서 나오는 중복조합 H가 생각났다. 딱 중복 가능한, 순서 따져야 하는.... 중복조합 아닌가! 이걸로 풀었다. import math n=int(input()) print((math.factorial(9+n)//(math.factorial(9)*math.factorial(n)))%10007) 하지만, 코더의 본분은 코딩이거늘... dp로 마지막 자리로 index 잡고, 하나씩 늘려주면 된다! 하하 수학 1승.!

BOJ 11053: 가장 긴 증가하는 부분 수열

https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 오늘의 문제다! 우선 실패한 코드부터 올려보려고 한다. n=int(input()) data=list(map(int,input().split())) streak=[1]*n pastScore=data for i in range(n): for j in range(0,i): if data[i] > pastScore[j]: st..

BOJ 11053: 가장 긴 증가하는 부분 수열

https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 오늘의 문제다! 우선 실패한 코드부터 올려보려고 한다. n=int(input()) data=list(map(int,input().split())) streak=[1]*n pastScore=data for i in range(n): for j in range(0,i): if data[i] > pastScore[j]: st..

BOJ 11052: 카드 구매하기

안녕하세요! 23살 무니화니로 찾아뵙습니다! 새해 복 많이 받으시고 항상 즐코딩하십쇼! https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 이 문제를 읽자마자, 굉장히 복잡하겠다는 생각이 들었다. 사실 근데 문제만 요란하지, 푸는 문제는 다이내믹 프로그래밍 그 자체로 풀 수 있었다. n=int(input()) cards=[0]+list(map(int,input().split())) prices=[0]*(n+1) for i in range(1,n+1): f..

BOJ 15990: 1,2,3 더하기 5

안녕하세요! 2021년 마지막 날에도 이 문제를 풀고 있네요 ㅎㅎ https://www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 바로 이 문제입니다! n=int(input()) data=[[0]*4 for _ in range(100001)] data[1]=[0,1,0,0] data[2]=[0,0,1,0] data[3]=[0,1,1,1] for i in range(4,100001): data[i][1]=data[i-1][2]+data[i-1][3] data[i][2]=data[i-2][1]+data[i-2][3..