BOJ

BOJ

[백준/BOJ] python 1149번 RGB거리

언어: python 번호: 1149 제목: RGB거리 등급: 실버1 ​ 풀이 과정: ​DP(동적계획법)으로 풀 수 있다. 집의 색깔은 빨강, 초록, 파랑 중에 하나로 칠해야 한다. 이때 i번째(1 i-1번째 집이 초록 또는 파랑 중에 비용이 적은 것 i번째 집은 초록 > i-1번째 집이 파랑 또는 빨강 중에 비용이 적은 것 으로 칠하면 된다. 2차원 배열 DP[n][3]을 만들어 n번째 열에 n번째 집을 칠하는 색깔에 따라 생기는 비용의 총합을 저장해 가장 작은 값을 출력하면 된다. 예제 입력 1 3 26 40 83 49 60 57 13 89 99 dp[n][3] 1번째 2번째 3번째 모든 집을 칠하는 비용 빨강 26 min(40, 83) + 49 = 89 min(96, 73) + 13 = 86 86 초..

BOJ

[백준/BOJ] python 1912번 연속합

언어: python 번호: 1912 제목: 연속합 등급: 실버 2 풀이 과정: DP를 이용한다. 숫자들을 리스트로 입력받고, for문으로 리스트를 돌면서 최댓값만 저장한다. ​dp[i] =max(arr[i], dp[i-1] + arr[i]) 점화식은 위와 같다. 연속된 합을 구해야하기 때문에 여태까지 더한 값보다 더 큰 값을 만나면, 최댓값이 바뀌는 것이다. 이렇게 모인 최댓값들 중에 가장 큰 값을 출력하면 된다. ​ 코드: # 1912 n = int(input()) arr = list(map(int, input().split()) dp = [0] * n dp[0] = arr[0] for i in range(1, n): dp[i] = max(arr[i], dp[i-1] + arr[i]) print(max..

BOJ

[백준/BOJ] python 2447번 별 찍기 - 10

언어: python 번호: 2447 제목: 별 찍기 - 10 등급: 골드 5 ​ ​ 풀이 과정: 재귀를 이용해서 푼다. 크기 3의 패턴을 array로 만든다. ​ ​ 코드: # 2447 n = int(input()) arr = ["***", "* *", "***"] cnt = -1 while n: cnt += 1 n //= 3 for i in range(1, cnt): l1 = [j*3 for j in arr] l2 = [j+" "*3**i+j for j in arr] arr = [*l1, *l2, *l1] print("\n".join(arr)) 메모: 결국 못 풀고 답지 봤는데 이해는 되도 내가 짜기는 어렵다... 재귀함수 개념은 이해하고 피타고라스채는 익숙해졌지만 그림 그리는 건 문제를 많이 안 풀어..

BOJ

[백준/BOJ] python 10988번 팰린드롬인지 확인하기

언어: python 번호: 10988 제목: 팰린드롬인지 확인하기 등급: 브론즈 2 ​ 풀이 과정: 문자열은 하나의 리스트이기 때문에 n번째 글자와 끝에서 n번째 글자를 비교해서 모두 같으면 팰린드롬이고, 틀린 것이 하나라도 있으면 팰린드롬이 아니다. 시간을 단축하기 위해 0부터 n//2번째 글자까지 비교한다. ​ ​ 코드: # 10988 check = 1 s = input() n = len(s) for i in range(n//2): if s[i] != s[n-i-1]: check = 0 break print(check)

BOJ

[백준/BOJ] python 10448번 유레카 이론

언어: python 번호: 10448 제목: 유레카 이론 등급: 브론즈 1 ​ ​ 풀이 과정: n 번째 요소에 Tn의 값이 들어있는 리스트 lst를 만든다. 3중 for 문으로 lst 값의 요소를 더하면서 유레카 이론이 성립하면 값을 출력한다. ​ ​ 코드: 1번째) 224ms # 10448 lst = [0]*46 def func(n): for i in range(1, 46): for j in range(i, 46): for k in range(j, 46): if lst[i] + lst[j] + lst[k] == n: return 1 return 0 for i in range(1, 46): lst[i] = lst[i-1]+i t = int(input()) for _ in range(t): n = int(..

BOJ

[백준/BOJ] python 2217번 로프

언어: python 번호: 2217 제목: 로프 등급: 실버 4 ​ ​ 풀이 과정: 로프를 모두 사용하는 게 아니라 몇 개만 골라서 사용할 수 있고, 각각의 로프는 w/k만큼의 중량이 걸리게 되니 최대 중량을 구하기 위해서는 최대 중량이 큰 로프부터 골라서 써야 한다. 숫자를 입력받아 큰 것부터 정렬하고, 고른 로프 중 가장 최대 중량이 낮은 로프* 로프의 수가 전체의 최대 중량이다. 로프를 하나씩 추가하면서 비교하면서 최댓값을 구한다. ​ ​ 코드: # 2217 import sys IN = sys.stdin.readline n = int(IN()) rope = [0]*10001 for _ in range(n): rope[int(IN())] += 1 m, s = 0, 0 for i in range(100..

BOJ

[백준/BOJ] python 15552번 빠른 A+B

언어: python 번호: 15552 제목: 빠른 A+B 등급: 브론즈 4 ​ ​ 풀이 과정: 테스트 케이스 개수 t와 두 정수 a, b를 입력받아 합을 출력한다. 빠른 A+B이기 때문에 input 함수가 아닌 readlin 함수를 사용해야 한다. ​ ​ 코드: # 15552 import sys t = int(sys.stdin.readline()) for i in range(t): a, b = map(int, sys.stdin.readline().rstrip().split()) print(a+b) ​ 메모: readline 함수를 처음 사용해 봤다. ① prompt message를 받아 출력하는 기능이 없어서 ② 값을 따로 입력받지 않고 한 줄을 한 번에 입력받는다. 이 두 가지 이유로 input()보다..

BOJ

[백준/BOJ] python 2309번 일곱 난쟁이

언어: python 번호: 2309 제목: 일곱 난쟁이 등급: 브론즈 1 ​ ​ 풀이 과정: 난쟁이 9명의 키를 입력받는다. 그중 두 명의 키가 키의 합 - 100임을 이용해 이중 for 문으로 구한다. ​ ​ 코드: # 2309 lst = [] for _ in range(9): n = int(input()) lst.append(n) s = sum(lst) - 100 for i in lst: for j in lst: if i != j and i + j == s: lst.remove(i) lst.remove(j) lst.sort() print(*lst, sep="\n") exit() 메모: 알 수 없는 오류가 계속 뜬다. 다른 방식으로 풀었지만, 아직 해결은 못해서 질문해야겠다.

kyj0015
'BOJ' 태그의 글 목록 (2 Page)