분류 전체보기

[Python]알고리즘/백준

[그리디 알고리즘] ▲ 2839번 - 설탕 배달

[백준] 2839번 - 설탕 배달 (풀이1) 내 풀이 1) 문제 해결 아이디어 복잡하게 소스코드를 작성하다가 한 순간 아이디어가 떠올라 수학적으로 접근하여 문제를 해결하였다. 3x + 5y = n 이라는 식을 도출했다. x, y가 모두 양의 정수인 (x, y)쌍을 찾고 그들 중에서 (x+ y)의 최소값이 정답이다. 물론 여기서 위의 조건을 만족하는 (x, y)가 없다면 이는 3, 5 봉지 종류로는 만들 수 없다는 뜻이므로 -1을 출력시켜야 한다. x = 0부터 1씩 증가시키고 y는 x 값을 넣어 계산한 후, y가 음수가 되면 반복문을 탈출한다. x, y는 모두 양수여야 하며 y가 float형으로 계산된다면 해당 x, y 쌍을 더한 값은 리스트에 넣지 않는다. 2) 소스코드 n = int(input()) ..

[Python]알고리즘/백준

[그리디 알고리즘] 2217번 - 로프

[백준] 2217번 - 로프 1) 문제 해결 아이디어 물체의 최대 중량을 구하기 위해 로프를 내림차순 정렬하는 것이 포인트다. 물체의 중량이 w, 로프가 n개 일 때 각 로프에 걸리는 중량은 w/n 이다. 즉, 물체의 중량 = n * 로프 중량 모든 로프를 사용해야할 필요는 없으므로 로프는 (1 ~ n) 개 사용할 수 있다. 반복문을 통해 줄의 개수 n개에 따른 물체의 중량값을 게산하여 리스트에 덮어쓴다. 여기서 반복문 인덱스는 0부터 시작하므로 실제로 곱해주는 값은 (i +1) 이어야 함을 주의한다. 해당 리스트의 최대값을 max() 함수로 구한다. 2) 소스코드 n = int(input()) # 줄 개수 powers = [int(input()) for _ in range(n)] # 각 줄의 최대 중량..

[Python]알고리즘/백준

[그리디 알고리즘] 11399번 - ATM(완전탐색)

[백준] 11399번 - ATM 1) 문제 해결 아이디어 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값은 각 사람의 인출 시간을 오름차순으로 정렬하는 것이다. 각 사람의 인출 소요 시간은 앞 사람의 인출 소요 시간에 자신의 인출 시간을 더한 값이므로 앞 사람들의 인출 시간이 적어야 총 인출 시간이 최소가 된다. 2) 소스코드 n = int(input()) # 사람 수 times = list(map(int, input().split())) # 각 사람의 인출 시간 res = 0 # 총 최소 시간 times.sort() # 오름차순 정렬 for i in range(n): # 0 ~ i까지 더하기 for j in range(i+1): res += times[j] print(res)

[Python]알고리즘/백준

[그리디 알고리즘] 11047번 - 동전

[백준] 11047번 - 동전 1) 문제 해결 아이디어 사실상 최소 개수로 동전을 거슬러주는 문제와 동일하다. 동전의 가치가 큰 동전을 최대한 많이 거스는 것이 동전을 최소로 하기 위한 방법이다. 동전 종류를 큰 순서대로 내림차순하여 처리하는 것이 포인트다. 높은 금액대부터 for문으로 검사하여 동전 가치가 금액보다 작거나 같으면 몇 개를 바꿀 수 있는지 계산하여 더해주는 방식으로 구현하였다. 2) 소스코드 n, k = map(int, input().split()) # 동전 종류 수, 총 금액 coins = [int(input()) for _ in range(n)] # 동전 가치(오름차순) coins.sort(reverse=True) # 내림차순 정렬 cnt = 0 # 필요한 동전 개수 # 필요한 동전 ..

[Python]알고리즘/코드업

[기초 - 리스트] ★ 6098 - 성실한 개미

6098 - 성실한 개미 1) 문제 해결 아이디어 탈출 조건은 크게 3가지이다. 1) 먹이를 찾았을 경우 2) 맨 아래, 오른쪽에 위치한 경우 3) 오른쪽, 아래쪽이 벽인 경우 2) 소스코드 (풀이1) 내 풀이 시작 지점은 이미 방문한 것으로 처리하고 시작한다. 방향벡터를 설정하여 구현하였다. # 맵(0: 길, 1: 벽/장애물, 2: 먹이) # 10 * 10 맵 입력 maze = [list(map(int, input().split())) for _ in range(10)] x , y = 1, 1 # 현재 좌표(시작 지점으로 초기화) maze[x][y] = 9 # 현재 좌표 방문 표시 # 이동 방향 (오른쪽, 아래쪽) dx = [0, 1] dy = [1, 0] while True: # 오른쪽 좌표 nx =..

[Python]알고리즘/이코테 2021

[구현] 문제5 - 게임 개발

게임 개발 1) 문제 해결 아이디어 전형적인 시뮬레이션 문제 방향을 설정해서 이동하는 문제 유형에서는 dx, dy라는 별도의 리스트를 만들어 방향을 정하는 것이 좋음 2차원 리스트 선언시 리스트 컴프리헨션을 이용하는 것이 좋음 2) 소스코드 (풀이1) 나의 풀이 현재 방향 기준에서 왼쪽, 반대(후진) 방향을 리스트로 만듦 n, m = map(int, input().split()) # 맵 크기 a, b, d = map(int, input().split()) # 시작 좌표, 방향 # n * m 맵 입력 # 0: 육지, 1: 바다, 2: 가본 곳 arr = [list(map(int, input().split())) for _ in range(n)] x, y = a, b # 현재 위치 arr[x][y] = 2 ..

[Python]알고리즘/이코테 2021

[구현] ▲ 문제4 - 문자열 재정렬

문자열 재정렬 1) 문제 해결 아이디어 입력된 문자열의 문자를 하나씩 확인한다. 숫자인 경우 합계를 계산하고 알파벳인 경우 리스트에 저장한다. 리스트에 저장된 알파벳을 출력하고 합계를 뒤에 붙여 출력한다. 2) 소스코드 알파벳 여 리스트를 문자열로 변환하는 방법을 몰라 검색을 통해 알게되었다. 단순 반복으로 리스트 문자를 하나씩 붙이는 방법도 있으나 내장함수를 쓰는게 훨씬 빠르고 좋은 방법같다. 처음 코드를 짰을 때 입력된 문자열에 숫자가 하나도 없을 경우를 생각하지 않고 짰더니 "abc"같이 숫자가 없는 문자열의 경우에는 "abc"로 출력되는 것이 아니라 "abc0" 으로 출력되었다. 입력된 문자열에 숫자가 하나도 없을 경우를 고려하여 합계가 0인 경우에는 알파벳 문자열만 출력되도록 해야한다. s = ..

[Python]알고리즘/이코테 2021

[구현] 문제3 - 왕실의 나이트

왕실의 나이트 1) 문제 해결 아이디어 현재 위치의 행에 대한 알파벳(a~h)를 1~8 로 바꾼다. 나이트의 8가지 경로에 해당하는 위치로 이동가능한지 확인한다. 리스트를 이용해 8가지 방향에 대한 방향 벡터를 정의한다. 2) 소스코드 알파벳으로 입력된 y좌표(a~h)를 1~8 로 변환하는데 오류를 겪었지만 ord()함수를 사용하여 잘 해결하였따. 기준 좌표를 (1, 1)로 하기 위해 1을 추가로 더해주었다. (풀이1) 방향벡터를 2개 리스트로 구현 now = input() cnt = 0 # 경우의 수 x = int(now[1]) # x 좌표 y = ord(now[0]) - ord('a') + 1 # y 좌표 # 이동 방향 dx = [1, -1, -1, 1, 2, -2, -2, 2] dy = [2, 2,..

HSY_mumu
'분류 전체보기' 카테고리의 글 목록 (35 Page)