파이썬

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() 메모: 알 수 없는 오류가 계속 뜬다. 다른 방식으로 풀었지만, 아직 해결은 못해서 질문해야겠다.

BOJ

[백준/BOJ] python 2231번 분해합

언어: python 번호: 2331 제목: 분해합 등급: 실버 4 ​ ​ 풀이 과정: 분해합 N으로 자연수 M을 거꾸로 구할 수는 없다. 자연수 1부터 M까지의 분해합을 모두 구하면서 가장 작은 자연수를 찾아야 한다. 이때 1부터 M까지의 분해합을 차례대로 구하니까 처음 구한 자연수 M을 출력하면 된다. ​ ​ 코드: # 2231 n = int(input()) result = 0 for i in range(n+1): m = i + sum(list(map(int, str(i)))) if n == m: print(i) break if n == i: print(0) ​ 메모: 리스트의 자료형을 한 번에 바꿀 때도 map 함수를 사용한다.

kyj0015
'파이썬' 태그의 글 목록 (2 Page)