PYTHON

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)) 메모: 결국 못 풀고 답지 봤는데 이해는 되도 내가 짜기는 어렵다... 재귀함수 개념은 이해하고 피타고라스채는 익숙해졌지만 그림 그리는 건 문제를 많이 안 풀어..

Project

Mahotas 모듈을 이용한 유사한 이미지 찾기 모델

학과 경진대회에서 사용하기 위해 찾은 모델이다. Mahotas 모듈을 이용하여 이미지 셋에서 유사한 이미지를 찾아준다. 그대로 사용하려해도 계속 오류가 떠서 수정하고 생략한 부분이 있다. Google Colab을 이용했다. 아직 다 이해하지는 못했지만 아는 부분이라도 기록하려 한다. https://github.com/luispedro/BuildingMachineLearningSystemsWithPython pip install numpy --upgrade pip install mahotas pip install imread 데이터 불러와서 리스트에 넣기 from glob import glob import mahotas as mh import numpy as np import matplotlib.pyplo..

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()보다..