알고리즘 문제 풀이 127

[이코테] CH03 그리디 실전문제 5번 볼링공 고르기

import sys # sys.stdin.readline() from collections import deque sys.setrecursionlimit(100000000) import heapq INF = 1e9 N,M = map(int,sys.stdin.readline().split()) x = list(map(int,sys.stdin.readline().split())) x.sort() count = 0 for i in range(len(x)): for j in range(i,len(x)): if x[i]!=x[j]: count +=1 print(count) 처음에 보고 이렇게 쉽다고? 하면서 풀었는데 이러면 반복문이 총 len(x) * ( 1 + 2 + ... (len(x)-1)만큼 돌아가므로 메..

[이코테] CH03 그리디 실전문제 4번 만들수 없는 금액

import sys # sys.stdin.readline() from collections import deque sys.setrecursionlimit(100000000) import heapq INF = 1e9 N = int(input()) x = list(map(int,sys.stdin.readline().split())) x.sort() target = 1 for elem in x: if target < elem: break # 만들 수 없는 금액 target += elem print(target) 30분 고민하다가 그냥 답지 봤다 코드가 참 짧네..^^ 열심히 해야겠다. 로직은 이해했는데 이걸 다시 복습해야할 필요가 있을 듯 하다

[이코테] CH03 그리디 실전문제 3번 문자열 뒤집기

import sys # sys.stdin.readline() from collections import deque sys.setrecursionlimit(100000000) import heapq INF = 1e9 x = list(sys.stdin.readline().rstrip()) countzero = 0 countone = 0 count = 0 if x[0] == '1': countzero = 1 else: countone = 1 for i in range(len(x)-1): if x[i]!=x[i+1]: if x[i+1] == '0': countone +=1 # 0-> 1 else: countzero +=1 # 1-> 0 value = min(countone,countzero) print(valu..

[이코테] CH03 그리디 실전문제 1번 모험가 길드

import sys # sys.stdin.readline() from collections import deque sys.setrecursionlimit(100000000) import heapq INF = 1e9 N = int(input()) x = list(map(int,sys.stdin.readline().split())) x.sort() count = 0 temp = x[0] number = 0 for i in range(len(x)): temp = max(temp,x[i]) if x[i] temp: # 만약 기준인 temp값을 넘어간다면 ? (해당 원소가 더 큰 인원수를 필요로 하는 경우) number = 0 # 그룹 멤버로 세던 넘어를 초기화해준다. temp = x[i] # temp값을 다시 ..

[이코테] CH03 그리디 실전문제 1이 될 때 까지

from collections import deque sys.setrecursionlimit(100000000) import heapq INF = 1e9 N,K = map(int,sys.stdin.readline().split()) count = 0 while True: if N == 1: break if N%K == 0: N = N / K count +=1 else: N -=1 count +=1 print(count) 일단 이게 내 코드이다 K가 2보다 크거나 같다는 것을 보고 K로 나눠줄 수 있으면 무조건 나눠주는 것이 이득이겠구나를 잡아내고 간단하게 풀었다 테스트 케이스도 다 맞는 건 확인했지만 반례가 있다면 환영입니다 ! 이건 답안입니다 import sys # sys.stdin.readline()..

[이코테] CH03 그리디 실전문제 숫자 카드 게임

import sys # sys.stdin.readline() from collections import deque sys.setrecursionlimit(100000000) import heapq INF = 1e9 array = [] N,M = map(int,sys.stdin.readline().split()) for _ in range(N): array.append(list(map(int,sys.stdin.readline().split()))) maxValue = min(array[0]) for i in range(N): temp = min(array[i]) if maxValue < temp: maxValue = temp print(maxValue) 내 코드 이차원배열으로 해결했다 그냥 maxValue..

[이코테] CH03 그리디 실전문제 큰수의법칙

import sys # sys.stdin.readline() from collections import deque sys.setrecursionlimit(100000000) import heapq INF = 1e9 N,M,K = map(int,sys.stdin.readline().split()) x = list(map(int,sys.stdin.readline().split())) x.sort(reverse = True) max = x[0] max2 = x[1] sum = 0 index = 0 print(x) for _ in range(M): index +=1 if index % K == 0: sum+=max2 else: sum += max print(sum) 일단 이게 내가 처음 짠 코드 k번은 가장 큰..

[백준] 2206 벽 부수기 BFS 파이썬 풀이

https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 문제 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 만약에 이동하는 도중에 한..