백준 / 1541번 / 잃어버린 괄호 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/1541  문제 접근이 문제는 괄호가 없는 식이 주어졌을 때, 예를 들어 2 + 3 - 10 + 5 + 22 라는 식이 있을 때 괄호를 넣어 식의 값을 최소로 만드는 코드를 작성해야 한다. 값이 최소가 되기 위해서는 '-'를 기준으로 사이에 있는 값들에 괄호를 넣으면 최솟값을 구할 수 있다. 따라서 입력을 받을 때 split('-')을 사용해 나누고,  이 나누어진 각각의 문자열의 연산 결과를 구하기 위해 split('+')을 하고, 그 값을 for문을 돌려 더한 뒤 tmp 배열에 넣는다. 이후 배열의 값들을 마이너스 연산을 하면 괄호를 넣어서 계산한 연산 결과와 동일한 결과를 얻을 수 있다. 코드n = input().split('-')t..
백준 / 2178번 / 미로 탐색 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/2178  문제N×M크기의 배열로 표현되는 미로가 있다.101111101010101011111011 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다.위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다. 입력첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다..
백준 / 1149번 / RGB거리 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/1149  코드import sysinput = sys.stdin.readlinen = int(input())HC = []for _ in range(n): HC.append(list(map(int, input().split())))for i in range(1, n): HC[i][0] = HC[i][0] + min(HC[i - 1][1], HC[i - 1][2]) HC[i][1] = HC[i][1] + min(HC[i - 1][0], HC[i - 1][2]) HC[i][2] = HC[i][2] + min(HC[i - 1][0], HC[i - 1][1])print(min(HC[n-1])) 이전 집에서 사용한 색을 제외한 ..
백준 / 1759번 / 암호 만들기 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/1759  코드from itertools import combinationsL, C = map(int, input().split())alpabet = sorted(list(input().split()))vowel = {'a', 'e', 'i', 'o', 'u'}result = []for pw in combinations(alpabet, L): count_vowels = sum(1 for i in pw if i in vowel) if count_vowels >= 1 and L - count_vowels >= 2: result.append(''.join(pw))for pw in result: print(pw) 서로..
백준 / 1107번 / 리모컨 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/1107  코드 import sysinput = sys.stdin.readlinen = int(input())m = int(input())ans = abs(100 - n)if m: btn = list(input().split())else: btn = []for num in range(1000001): for i in str(num): if i in btn: break else: ans = min(ans, len(str(num)) + abs(num - n))print(ans) 처음에는 버튼을 최소한으로 눌러야 한다는 조건에 고장난 버튼의 최소, 최댓값과 ans(n - 100)..
백준 / 28278번 / 스택 2 / python 파이썬
·
코딩테스트/백준 (python)
문제 : 28278번: 스택 2 (acmicpc.net) https://www.acmicpc.net/problem/1181  기초적인 스택의 동작 방식만 알면 쉽게 풀 수 있는 문제였다. 코드 import sysinput = sys.stdin.readlinestack = []n = int(input())for i in range(n): x = list(map(int, input().split())) if x[0] == 1: stack.append(x[1]) elif x[0] == 2 : if stack: print(stack.pop()) else: print(-1) elif x[0] == 3: ..
백준 / 1629번 / 곱셈 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/1629  처음 문제를 보고 쉬운 문제라고 생각하고 바로 풀었으나 import sysinput = sys.stdin.readlinea, b, c = map(int, input().split())print((a ** b) % c) 바로 시간 초과가 났다. 이 문제는 Divide and Conquer, 분할 정복의 원리를 사용해야 풀 수 있는 문제였다.  분할 정복이란?분할 정복 (Divide and Conquer)은 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산한다.  분할 정복이 일반 재귀 호출과 다른 점은 문제를 한 조각과 전체로 나누는 대신, 비슷한..
백준 / 2346번 / 풍선 터뜨리기 / python 파이썬
·
코딩테스트/백준 (python)
문제 : https://www.acmicpc.net/problem/2346   코드from collections import dequeimport sysinput = sys.stdin.readlinen = int(input())q = deque(enumerate(map(int, input().split())))ans =[]while q: idx, num = q.popleft() ans.append(idx + 1) if num > 0: q.rotate(-(num - 1)) elif num   deque.rotate() deque는 rotate() 함수를 사용하여 회전시킬 수 있다.- rotate(1): 인자 값이 양수이면 오른쪽 회전- rotate(-1): 인자 값이 음수..