👉🏻 2230번: 수 고르기 import sys; input=sys.stdin.readlineN, M = map(int, input().split())num = sorted([int(input()) for _ in range(N)])left, right = 0, 1ans = float('inf')while right 💡 왜 이렇게 풀었을까?저는 투 포인터를 사용해서 해당 문제를 풀었습니다. 이제는 왜 투 포인터를 사용하는지 알겠더군요.M과 A[i]의 크기 범위만 봐도 2중 반복문으로 걸러내기엔 시간 초과가 날 것만 같았습니다.투 포인터는 정렬된 상태에서 탐색하면 두 수의 차이를 조금 더 효율적으로 계산할 수 있고,그래서 특정 차이를 만족하는 두 수를 빠르게 찾기 위해 투 포인터 기법을 활용해봤습니..
👉🏻 24417번: 알고리즘 수업 - 피보나치 수 2mod = int(1e9) + 7n = int(input())ans = n-2prev, cur = 1, 1for _ in range(ans): nv = (prev + cur) % mod prev, cur = cur, nvprint(cur, ans)왜 이렇게 풀었을까?해당 문제는 제목만 봐도 파악할 수 있듯, 피보나치 수에 관한 내용을 다루고 있습니다. 피보나치 수를 알고리즘으로 구하기 위해서는 대표적으로 재귀, DP의 2가지 방법을 사용할 수 있는데, 문제에서는 두 개를 모두 요구하고 있습니다.fib(n) { if (n = 1 or n = 2) then return 1; # 코드1 else return (fib(n - 1..
👉🏻 2303번: 숫자 게임import sys; input=sys.stdin.readlinefrom itertools import combinationsn = int(input())max_scores = []for person in range(1, n+1): cards = list(map(int, input().split())) max_score = 0 for combo in combinations(cards, 3): score = sum(combo) % 10 max_score = max(max_score, score) max_scores.append((max_score, person))winner = max(max_scores, key=l..
👉🏻 3060번: 욕심쟁이 돼지def yumyum(meals): even_sum = meals[0] + meals[2] + meals[4] odd_sum = meals[1] + meals[3] + meals[5] new_meals = [meals[i] + (odd_sum if i % 2 == 0 else even_sum) for i in range(6)] return new_mealsfor _ in range(int(input())): n = int(input()) meals = list(map(int, input().split())) total_sum = sum(meals) if total_sum > n: print(1) conti..
👉🏻 5568번: 카드 놓기from itertools import permutationsn = int(input())k = int(input())cards = [input() for _ in range(n)]result = set()for perm in permutations(cards, k): result.add(''.join(perm))print(len(result))itertools 모듈에 있는 combinations와 permutations 중 즉, 순열과 조합 중 어떤 것을 이용하여 푸는 것인지만 알고 풀이를 쓰다보면 파이썬으로는 금새 풀어낼 수 있는 문제입니다.왜 이렇게 풀었을까?처음에는 브루트포스로도 충분히 풀어낼 수 있는 입력 크기여서 반복문으로 접근해보다가 결국 쉬운 방법을 택하..
👉🏻 25329번: 학생별 통화 요금 계산info = {}for _ in range(int(input())): time, name = input().split() hour, minute = map(int, time.split(':')) total_minute = hour * 60 + minute info[name] = info.get(name, 0) + total_minutefor name in info: if info[name] get() 함수에 default 값을 부여하여 dict를 초기화하는 방법은 정말 유용한 것 같습니다. ㅎㅎ다른 것들은 무리가 없었는데 info를 정렬할 때 요금은 내림차순으로, 이름은 오름차순으로 정렬을 해야했기에 고민을 꽤나 했습니다. 만약, 정..
👉🏻 2740번: 행렬 곱셈n, m = map(int, input().split())matrix = [list(map(int, input().split())) for _ in range(n)]m, k = map(int, input().split())matrix2 = [list(map(int, input().split())) for _ in range(m)]for i in range(n): for j in range(k): result = 0 for x in range(m): result += matrix[i][x] * matrix2[x][j] print(result, end=' ') print()기본적인 행렬 곱셈 연산을 안다면 충분..
👉🏻 27961번: 고양이는 많을수록 좋다n = int(input())cat = 1cnt = 0if n == 0 or n == 1: cnt = n print(cnt)else: while cat != n: if cat >= n - cat: cat += n - cat cnt += 1 else: cat += cat cnt += 1 print(cnt + 1)단순 그리디 문제로 현재 고양이 수에 따라 while문 내에서 더하는 수를 조절하며 카운트를 늘려주기만 하면 되는 간단한 문제였습니다!