목록전체 글 (43)
코딩하는 베어브릭
*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다. 내 풀이 1. 상자의 높이를 오름차순으로 정렬한다. 2. 가장 높이가 큰 값은 1 감소시키고, 가장 높이가 작은 값은 1 증가시켜 상자를 이동시켜준다. 이 과정을 m회 반복한다. import sys #sys.stdin=open("input.txt","rt") l=int(input()) heights=list(map(int,input().split())) m=int(input()) for _ in range(m): heights.sort() heights[-1]-=1 heights[0]+=1 heights.sort() print(heights[-1]-heights[0]) 강사님 풀이 import sys sys.stdin=open("inp..
*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다. 내 풀이 1. 지원자들의 키와 몸무게를 튜플로 저장하고, 키 순서에 따라 정렬한다. 키 순서대로 정렬하면, 해당 지원자의 다음 지원자들은 모두 키가 큰 것이기 때문에 해당지원자가 뽑히기 위해서는 다음 지원자들의 몸무게보다 커야한다. 따라서 몸무게만 비교를 해주면 된다. 2. 해당 지원자의 몸무게보다 큰 다음 지원자가 있다면 뽑힐 수 없기 때문에 break를 통해 중단하고, break에 걸리지 않고 반복문이 끝까지 수행되었다면 해당지원자의 몸무게보다 큰 지원자가 없기 때문에 cnt의 값을 1 증가시켜준다. import sys sys.stdin=open("input.txt","rt") n=int(input()) people=[] for _..
*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다. 내 풀이 풀지 못함.. 강사님 풀이 import sys sys.stdin=open("input.txt","rt") n=int(input()) meeting=[] for i in range(n): s,e=map(int,input().split()) meeting.append((s,e)) meeting.sort(key=lambda x: (x[1],x[0])) et=0 cnt=0 for s,e in meeting: if s>=et: et=e cnt+=1 print(cnt) 배운점 1. 그리디 알고리즘이란 현재 상황에서 가장 좋은 것을 고르는 알고리즘이다. 그렇기 때문에 정렬을 사용해서 가장 좋은 것부터 차례차례 선택해나가면 된다. 문제 상황..
문제 https://www.acmicpc.net/problem/11866 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제 풀이 1. 1부터 n명의 사람을 리스트로 담는다. 2. 위의 리스트에서 k번째가 아니라면 리스트의 첫번째 요소를 다시 맨 뒤로 보내고, k번째라면 리스트의 첫번째 요소를 리스트에서 삭제한다. 3. 위의 과정을 공백리스트가 될 때까지 반복한다. import sys n,k=map(int,input().split()) people=[str(x+1) for x in range(n)] i=1 res=[] while people!=[]: if i==k: res.append(peop..
문제 https://www.acmicpc.net/problem/13900 13900번: 순서쌍의 곱의 합 첫 번째 줄에는 입력 받을 정수의 개수 N(2 ≤ N ≤ 100,000) 두 번째 줄에는 N 개의 정수가 주어진다. 이때 입력 받는 정수들의 범위는 0이상 10,000 이하이다. www.acmicpc.net 문제 풀이 이 문제를 푸는 데 수많은 시행착오를 거쳤다... 일단 결론부터 말하자면, 순서쌍 하나하나 더하는 것이 아닌 결합법칙을 사용해서 여러개의 순서쌍을 한 번에 더하는 것이 주요 포인트!! 반복문 사용을 최소한으로 해서 시간복잡도를 줄이고, 연산을 적게 사용해서 같은 시간복잡도더라도 더 빠르게 결과를 얻을 수 있도록 만들어야한다. 입력값이 1 2 3 4가 주어진 상황이라고 해본다. 결합법칙을..
문제 https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 문제 풀이 폭탄 문자열이 입력 문자열에 없을 때까지 replace함수를 이용해 폭탄문자열을 ''로 대체했다. 하지만 시간초과가 났다... 아무래도 내장함수를 사용하는 것이 시간이 오래 소요되는 것 같다. import sys s=input() bomb=input() while bomb in s: s=s.replace(bomb,'') if s=='': print('FRULA') e..