본문 바로가기

BOJ/Python

(192)
[BOJ/백준] 11652 - 카드 (Python) 문제문제링크가지고 있는 숫자 카드 중 가장 많은 것을 찾아라.가장 많이 가지고 있는 정수가 여러 가지면, 작은 것을 출력하라. 풀이dictionary를 사용했다.숫자카드의 정수를 key로, 개수를 value로 하여 dictionary에 있으면 개수에 1을 더하고 없으면 key값을 추가해 value를 1로 둔다.첫번째 정렬기준은 개수(내림차순), 두번째 정렬기준은 정수(오름차순)이다.key=lambda x로 이를 구현하고 맨 앞값의 key값을 출력하면 된다. 코드import sysinput=sys.stdin.readlinecounter={}n=int(input())for _ in range(n): i=int(input()) if i in counter: counter[i]+=1 ..
[BOJ/백준] 10825 - 국영수 (Python) 문제문제링크국어 점수가 감소하는 순, 영어 점수가 증가하는 순, 수학점수가 감소하는 순, 이름이 사전 순으로 증가하는 순서로학생들을 정렬하여 이름을 출력한다. 풀이이름과 성적들을 입력받아 성적은 int형으로 바꾸어 리스트에 저장한다.key=lambda x를 이용하여 리스트를 정렬한다.정렬기준이 여러 개이므로 괄호 안에 넣고 국어점수, 수학점수는 감소하는 순이라 했으니 기준 앞에 '-'를 붙여주면 된다. 코드import sysinput=sys.stdin.readlinen=int(input())lst=[]for _ in range(n): name, korean, english, math = input().strip().split() lst.append([name, int(korean), int(e..
[BOJ/백준] 10844 - 쉬운 계단 수 (Python) 문제문제링크각 계단은 모든 자리 차이가 1이고 0으로 시작하는 수는 없다.길이 n인 계단 수가 총 몇 개 있는가? 풀이n=1일 때, 0으로 시작하는 경우는 없으므로 dp[1][0]은 0이다. 나머지는 모두 1이다.n이 2 이상일 때, 이번 자리수가 0이면 이전 자릿수는 무조건 1에서 와야하므로 dp[i-1][1]과 같다.이번 자리수가 0인 경우도 이전 자릿수는 무조건 8에서 와야하므로 dp[i-1][8]와 같다.나머지 경우에는 현재 자리수보다 1 작거나 큰 수에서 올 수 있으므로 dp[i-1][j-1]+dp[i-1][j+1]가 된다. 코드import sysinput=sys.stdin.readlinen=int(input().strip())dp=[[0]*10 for _ in range(n+1)]for i i..
[BOJ/백준] 9095 - 1, 2, 3 더하기 (Python) 문제문제링크정수 n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하라. 풀이n=1일 경우 1, n=2일 경우 1+1와 2, n=3일 경우 1+1+1와 1+2와 2+1와 3가 가능하다.마지막에 3을 더하는 경우는 n-3까지를 나타내는 방법의 수와 같으므로 dp[n-3]와 같다.2를 더하는 경우는 dp[n-2], 1을 더하는 경우는 dp[n-1]와 같다.dp[n]은 이 세 경우 모두 포함하므로 dp[n]=dp[n-3]+dp[n-2]+dp[n-1]이다. 코드import sysinput=sys.stdin.readlinet=int(input())for _ in range(t): n=int(input()) dp=[0]*(n+1) dp[1]=1 if n>=2: dp[2]=2 ..
[BOJ/백준] 11727 - 2×n 타일링 2 (Python) 문제문제링크2*n 크기의 직사각형을 1*2(가로타일), 2*!(세로타일), 2*2(정사각형 타일) 타일로 채우는 방법의 수를 10007로 나눈 나머지를 구하라. 풀이[BOJ/백준] 11726 - 2×n 타일링 (Python) [BOJ/백준] 11726 - 2×n 타일링 (Python)문제문제링크2*n 크기의 직사각형을 1*2(가로타일), 2*!(세로타일) 타일로 채우는 방법의 수를 10007로 나눈 나머지를 구하라. 풀이n=1일 경우 2*1 타일 한 개만 사용할 수 있다. 이를 if문으로 예외로tjdms4327.tistory.com대부분의 풀이는 위 링크와 같다.정사각형 타일을 맨 끝에 채우는 경우는 가로 타일을 채운 경우와 같다.따라서 dp[n-2]이므로, dp[n]=(dp[n-2]+dp[n-1])+d..
[BOJ/백준] 11726 - 2×n 타일링 (Python) 문제문제링크2*n 크기의 직사각형을 1*2(가로타일), 2*!(세로타일) 타일로 채우는 방법의 수를 10007로 나눈 나머지를 구하라. 풀이n=1일 경우 2*1 타일 한 개만 사용할 수 있다. 이를 if문으로 예외로 빼둔다.이외에는 dp에 방법의 수를 저장한다.dp[1]=1이고 dp[2]=2(각 타일로만 이루어짐)이다.만약 맨 끝에 가로타일을 놓게 된다면 그 전까지의 직사각형 크기는 2*(n-2)이므로 dp[n-2]와 같다.세로 타일을 놓으면 dp[n-1]이다.dp[n]은 이 두가지 경우를 모두 포함해야 하므로 둘의 합으로 정의한다.for문으로 n까지 위 과정이 반복되면 dp[n]값을 10007으로 나눈 나머지를 출력한다. 코드import sysinput=sys.stdin.readlinen=int(inp..
[BOJ/백준] 1463 - 1로 만들기 (Python) 문제문제링크정수 x에 가능한 연산은 다음 세 가지이다.X가 3으로 나누어 떨어지면, 3으로 나눈다.X가 2로 나누어 떨어지면, 2로 나눈다.1을 뺀다.정수 n을 위의 연산을 사용하여 1로 만들려고 할 떄, 연산 사용의 최소 횟수를 구하라.  풀이기본값은 1을 빼는 것으로 설정한다.만약 횟수 리스트 dp의 인덱스 i가 2로 나누어 떨어진다면 2로 나눈 몫에 1을 더한 값과 기본값 중 최소값으로 갱신한다.3으로 나누어떨어지는 경우도 마찬가지이다.인덱스가 n일 때까지 위 과정을 반복하면 dp[n]에는 세가지 연산을 최소한으로 사용한 횟수가 저장되어 있다. 코드import sysinput=sys.stdin.readlinen=int(input())dp=[0]*(n+1)for i in range(2,n+1): ..
[BOJ/백준] 1924 - 2007년 (Python) 문제문제링크2007년 1월 1일은 월요일이다. 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.같은 연도의 x월 y일의 요일은 무엇인가? 풀이인덱스는 0부터 시작하므로 x를 기준으로 리스트를 자를 때 해당 월까지 포함된다.따라서 month 리스트 맨 처음 값을 0으로 두어야 한다.[:x]로 1월부터 x-1월까지의 일 수를 더하고  y일을 더한다.이 값을 7로 나눈 나머지를 인덱스로 하여 요일 리스트에 접근하면 된다. 코드import sysinput=sys.stdin.readlinedef day(): month=[0,31,28,31,30,31,30,31,31,30,31,30,31] days=['SUN','MON',..