목록Python (25)
해야만 한다

문제 링크 풀이 인접한 아이들의 키 차이를 구하고 내림차순 정렬해서 상위 k-1명을 제외한 후 나머지의 차이의 합을 구하면 된다. 코드 ''' 인접한 것들 중 차이가 큰 친구들을 나눠서 4조를 만들어보자 1, 50 | 500 | 5000 | 5500, 5600 (49,1) (450,2) (4500,3) (500,4) (100,5) 선택된 것들은 3,4,2인데 총 비용은 3,4,2의 차이를 제외한 1과 5의 합 149 1, 50 | 500 | 5000, 5001 | 6000, 6001, 6002 (49,1) (450,2) (4500,3) (1,4) (999,5) (1,6) (1,7) 3과 5와 2가 선택됐고 49+1+2 결국 선택된 2,3,5를 제외하면 된다 differ 순으로 내림차순, k-1개 만큼 선..

문제 링크 풀이 A와 B 2 처럼 브루트포스 + 재귀로 도전했는데 실패했다. 시간 초과를 해결하기 위해서는 s를 t로 만드는 것이 아닌 t를 s로 만든다. s와 t를 리스트로 받아서 pop하는 방식을 사용한다. 코드 ''' 문자열의 뒤에 A를 추가한다. 문자열을 뒤집고 뒤에 B를 추가한다. ''' # s = input() # t = input() # check = 0 # t_A = t.count('A') # t_B = t.count('B') # def sol(st): # global check # t_reverse = t[::-1] # st_reverse = st[::-1] # st_A = st.count('A') # st_B = st.count('B') # if st_A > t_A: # return #..

문제 링크 풀이 순회하면서 사람을 발견하면 양 옆으로 k거리만큼의 범위 내에서 햄버거를 찾고 count를 증가시킨 후 P와 H가 아닌 다른 문자로 바꿔준다. 코드 n, k = map(int, input().split()) a = list(input()) cnt = 0 for i in range(len(a)): if a[i] == 'P': for j in range(max(i-k,0),min(i+k+1,n)): if a[j] == 'H': cnt += 1 a[j] = 'C' break print(cnt)

문제 링크 풀이 n = 1 일 때 2x1 타일 하나, n = 2 일 때 2x1 타일 둘 혹은 1x2 타일 둘 즉 dp[1], dp[2] = 1, 2 dp[3]부터는 이전 기록해뒀던 누적값들을 더해나간다 이를 점화식으로 세우면 dp[i] = dp[i-2] + dp[i-1] 코드 n = int(input()) dp = [0] * (n+2) dp[1] = 1 dp[2] = 2 for i in range(3,n+1): dp[i] = dp[i-2] + dp[i-1] print(dp[n]%10007)

문제 링크 풀이 i와 j로 순회하여 오일 가격을 비교하면서 더 싼 곳이 나오면 그 직전까지 오일을 다 산다 즉 최저가가 갱신될 때마다 그 직전까지 다 구매하는 방식 코드 import sys input = sys.stdin.readline n = int(input()) road_length = list(map(int, input().split())) oil_price = list(map(int, input().split())) i = 0 j = 1 res = 0 while 1: # 더 비싸거나 같은 가격이면 if oil_price[i]

문제 링크 풀이 예를 들어 63은 2진수로 표현하면 1111111이다. 또 63 = 1+2+4+8+16+32 이다. 숫자를 2진수로 표현하면 2의 n 제곱수는 각각 한번 밖에 사용할 수 없다. 즉, 초콜릿을 2의 제곱수로 나눠서 특정 수의 크기를 만들 때는 2진수로 표현 했을 때 최소의 수가 등장할 때까지 잘라주어야 그 수를 만들 수 있다. 특정 수를 K라 하면 K를 2의 제곱수들로 나눠서 @ + 2 의 형태가 되면 2짜리 크기의 초콜릿이 나올 때까지 잘라야하고, @ + 64의 형태가 되면 64짜리 크기의 초콜릿이 나올 때까지 잘라야한다. K보다 크거나 같은 2의 제곱수(이하 변수 two라고 한다)를 구하고 K와 two를 2진수로 변환한다. ( 여기서 two는 2의 제곱수이므로 1이 하나뿐인 2진수이다...

문제 링크 풀이 빙산을 녹이는 함수를 만들어서 빙산이 녹을 때마다 시간이 1년 지나게 하였다. 모든 좌표에서 bfs 탐색해서 분리된 것들의 개수를 구하고 분리된 것이 2개 이상이면 걸린 시간을 출력하고 종료 빙산이 다 녹았으면 0을 출력하고 종료 코드 ''' bfs 탐색 한번 융해작업 1번 융해작업이 끝나면 time += 1 빙산의 부분은 0미만으로는 안떨어짐 분리되면 종료 빙산이 다 녹아도 종료 ''' import sys from collections import deque input = sys.stdin.readline n, m = map(int, input().split()) arr = [list(map(int, input().split())) for _ in range(n)] # 모든 좌표를 bf..

https://www.acmicpc.net/problem/16236 풀이 아기 상어의 좌표를 구한 뒤 bfs 탐색을 시작한다. 적절한 먹이를 찾았다면 좌표값을 저장해두고 그 좌표값으로 다시 bfs 탐색을 떠난다. bfs 탐색을 마쳤는데 물고기를 먹지 않았다면 엄마를 부른다. 코드 import sys from collections import deque input = sys.stdin.readline n = int(input()) arr = [list(map(int, input().split())) for _ in range(n)] for i in range(n): for j in range(n): if arr[i][j] == 9: a, b = i, j arr[i][j] = 0 break size = 2 ..