알고리즘/Python

알고리즘/Python

[python] 백준 3085 - 사탕 게임

출처 : 백준, https://www.acmicpc.net/problem/3085 3085번: 사탕 게임 예제 3의 경우 4번 행의 Y와 C를 바꾸면 사탕 네 개를 먹을 수 있다. www.acmicpc.net 더보기 첫 번째 풀이 : 틀림 def forLeftRight(candy, current, visited = None): [row, col] = current color = candy[row][col] count = 0 for index in range(col, -1, -1): if candy[row][index] == color: count += 1 if visited: visited[row][index] = 1 else: break for index in range(col+1, len(candy)..

알고리즘/Python

[python] 백준 9095 - 1, 2, 3 더하기

출처 : 백준, https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 더보기 풀이 count = 0 def recursion(n): global count if not n: count += 1 return for i in range(3, 0, -1): if n >= i: recursion(n-i) for i in range(int(input())): recursion(int(input())) print(count) count = 0 재귀를 이용해 풀었다. 로직은 다음과 같다. 1. for문을 통해 3부터 1까지 감소하게 돌린다. 2. 들어온 수 n..

알고리즘/Python

[python] 백준 11726 - 2xn 타일링

출처 : 백준, https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 더보기 첫 번째 풀이 : 실패 if __name__ == '__main__': n = int(input()) count_arr = [0] * (n+1) count_arr[1] = 1 count_arr[2] = 2 for i in range(3, n+1): count_arr[i] = count_arr[i-1] + count_arr[i-2] print(count_arr[n] % 10007) runtime ..

알고리즘/Python

[python] 백준 9655 - 돌 게임

출처 : 백준, https://www.acmicpc.net/problem/9655 9655번: 돌 게임 상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다. www.acmicpc.net 사기칠라고 진짜.. 더보기 풀이 n = int(input()) if n % 2 == 0: print('CY') else: print('SK') 원리는 간단하다. 돌은 무조건 1개 아니면 3개만 가져갈 수 있다. 만약 돌이 2개가 남아도 2개를 다 취할 수 없다. 즉, 상근이와 창영이가 한 턴을 끝내면 무조건 서로 홀수 개씩 가져가고 끝나게 되므로 한 턴 종료시 돌은 전체에서 짝수 개가 사라진다. 플레이어는 둘 뿐이므로 돌의 개수가 홀수라면 턴이 다 돌고 새 턴에서 돌이 남아 상근이가 우승하고, 짝수라면..

알고리즘/Python

[python] 백준 14719 - 빗물

출처 : 백준, https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 다른 사람들 풀이 보니까 다 비슷하던데 나만 이렇게 생각했나봐............. 더보기 풀이 def solution(world): sum = 0 for line in world: count = 0 ing = False for box in line: if not ing and box == 1:#counting 시작 ing = True elif ing and b..

알고리즘/Python

[python] 백준 2504 - 괄호의 값

출처 : 백준, https://www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 더보기 풀이 def solution(pars): open = ['(', '['] close = [']', ')'] stack = [] prev_p = '' eq = '' for p in pars: if p in open: if prev_p in open: # 3. 열림-열림일 경우 : 식에 ( 괄호 추가 eq += '(' elif prev_p in close: # 5. 닫힘-열림..

알고리즘/Python

[python] 백준 14888 - 연산자 끼워넣기

출처 : 백준, https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 더보기 첫 번째 풀이 : 시간초과 from itertools import permutations def solution(num_arr, char_arr): per_char = permutations(char_arr, len(char_arr)) max_val = -1000000001 min_val = 1000000001 for ..

알고리즘/Python

[python] 백준 15649 - N과 M(1)

출처 : 백준, https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 더보기 쉬운 풀이 from itertools import permutations if __name__ == '__main__': n, m = map(int, input().split()) num_arr = [i for i in range(1, n + 1)] per_n = permutations(num_arr, m) for li in per_n: for num in li: prin..

알고리즘/Python

[python] 백준 6588 - 골드바흐의 추측

출처 : 백준, https://www.acmicpc.net/problem/6588 6588번: 골드바흐의 추측 각 테스트 케이스에 대해서, n = a + b 형태로 출력한다. 이때, a와 b는 홀수 소수이다. 숫자와 연산자는 공백 하나로 구분되어져 있다. 만약, n을 만들 수 있는 방법이 여러 가지라면, b-a가 가장 큰 www.acmicpc.net 의외로 시간초과가 안 떠서 놀랐던 문제 당연히 시간초과 뜰 줄 알았는데 더보기 첫 번째 풀이 : 실패 def Goldbach(n, prime_set): a, b = n//2, n//2 for i in range(0, a): if a in prime_set and b in prime_set: print('%d = %d + %d' % (n, a, b)) retu..

알고리즘/Python

[python] 백준 10610 - 30

출처 : 백준, https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 더보기 풀이 if __name__ == '__main__': n = list(input()) if '0' not in n: print(-1) elif sum(map(int, n)) % 3 != 0: print(-1) else: print(''.join(sorted(n, reverse = True))) 30의 배수이려면 1. 3의 배수이면서 2. 10의 배수이면 된다. 3의 배수이기 ..

알고리즘/Python

[python] 백준 1463 - 1로 만들기

출처 : 백준, https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 더보기 첫 번째 풀이 : 실패 if __name__ == '__main__': n = int(input()) count = 0 while n != 1: if n % 2 == 1: #홀수 if n % 3 == 0: n //= 3 else: n -= 1 else:#짝수 if n % 3 == 0: n //= 3 else: if (n-1) % 3 == 0: n -= 1 else: n //= 2 count += 1 print(count) 125 10 #8 두 번째 풀이 : 실패 if __name__ ==..

알고리즘/Python

[python] 백준 2581 - 소수

출처 : 백준, https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net 소수만 2연속 참고 : 에라토스테네스의 체 프로그래머스 - 소수 찾기 백준 1978 - 소수 찾기 더보기 풀이 if __name__ == '__main__': A, B = [int(input()) for _ in range(2)] num_set = set(i for i in range(A, B+1)) max_num = max(num_set) if 1 in num_set: num_set.rem..

제주도랏맨
'알고리즘/Python' 카테고리의 글 목록 (9 Page)