본문 바로가기

전체 글98

[백준] 11866번 파이썬 (요세푸스 문제 0) 1. 문제와 예제 2. 코드 import sys input = sys.stdin.readline # 입력 받기 N, K = map(int, input().split()) # ex. N = 7 -> queue = [1, 2, 3, 4, 5, 6, 7] queue = [(i+1) for i in range(N)] res = [] i = 0 while queue: i += (K-1) while (i >= len(queue)): i -= len(queue) res.append(str(queue.pop(i))) # 결과 출력 print('') 3. 풀이 예제를 통해 생각 과정을 적고 코드로 구현했다. 4. 추가 찾아보니 deque를 활용해서 푸는 방법도 있었다. 아래 게시글을 참고했다. https://develo.. 2024. 3. 18.
[백준] 11651번 파이썬 (좌표 정렬하기 2) 1. 문제와 예제 sort를 쓰면 되겠고 시간 제한에도 걸리지 않음을 쉽게 확인할 수 있다. 2. 코드 import sys input = sys.stdin.readline N = int(input().rstrip()) lst = [] for _ in range(N): x, y = map(int, input().split()) lst.append((x, y)) # 기준의 우선순위를 x[1]>x[0]으로 하는 방법 lst.sort(key = lambda x : (x[1], x[0])) for i in lst: print("{} {}".format(i[0], i[1])) 3. 풀이 기준의 우선순위에서 원하는 변수(이 문제에서는 y)를 우선으로 하는 방법을 사용하면 된다. 2024. 3. 18.
[백준] 11650번 파이썬 (좌표 정렬하기) 1. 문제와 예제 sort 사용해서 풀면 되겠다. 2. 코드 import sys input = sys.stdin.readline N = int(input().rstrip()) lst = [] for _ in range(N): x, y = map(int, input().split()) lst.append((x, y)) lst.sort() for i in lst: print("{} {}".format(i[0], i[1])) 3. 풀이 sort 과정에서 시간 제한에 걸리지 않는지만 계산해보자. sort의 시간복잡도는 O(nlogn) 정도, N의 최댓값은 100,000, 시간 제한은 1초, 백준에서 연산 1억 번에 1초이므로 시간 제한에 걸리지 않음을 확인했다. 따라서 문제없이 sort를 사용하면 풀다. 2024. 3. 17.
[백준] 10814번 파이썬 (나이순 정렬) 1. 문제와 예제 나이 순으로 출력이므로 sort를 사용하면 되겠다. 나이가 같으면 가입한 순으로 출력해야 하는 것만 유의하면 되겠다. 2. 코드 import sys input = sys.stdin.readline N = int(input().rstrip()) lst = [] # ex. lst = [(21, 'Junkyu'), (21, 'Dohyun'), (20, 'Sunyoung')] for i in range(N): age, name = input().split() age = int(age) lst.append((age, name)) # 특정 변수(여기서는 age)를 기준으로만 해서 정렬할 수 있음 lst.sort(key = lambda x : x[0]) for i in lst: print("{} {.. 2024. 3. 17.
[백준] 7568번 파이썬 (덩치) 1. 문제와 예제 얼핏 보고 sorted를 사용해야 하나 했지만 등수가 동등한 사람들이 나올 수 있는 것으로 보아 다른 방법이 좋겠다고 판단했다. 결국 한 사람을 기준으로 잡고 다른 모든 사람과의 대소를 비교해야 등수를 구할 수 있기 때문에 브루트포스 알고리즘을 사용하면 되겠다. 2. 코드 import sys input = sys.stdin.readline N = int(input().rstrip()) lst = [] # ex. lst = [(55, 185), (58, 183), (88, 186), (60, 175), (46, 155)] for _ in range(N): x, y = map(int, input().split()) lst.append((x, y)) for i in lst: rank = 1 .. 2024. 3. 13.
[백준] 2751번 파이썬 (수 정렬하기 2) 1. 문제와 예제 sorted 함수를 사용하면 될 거 같은데 시간복잡도를 고려해봐야겠다. 2. 코드 import sys input = sys.stdin.readline N = int(input().rstrip()) lst = [] for _ in range(N): lst.append(int(input().rstrip())) # N개의 수를 list로 받음 for i in sorted(lst): # 정렬함과 동시에 출력 print(i) 3. 풀이 문제에서 주어진 시간 제한은 2초이고 N의 최댓값은 100만이다. 시간 제한 안에 가능한지 알아보기 위해 sort, sorted의 시간복잡도를 알아보자. 이는 O(nlogn)보다도 최적화된 정도라고 한다. 또한 백준에서 1억 번의 연산이 1초가 걸린다고 생각하면 .. 2024. 3. 13.
[백준] 1676번 파이썬 (팩토리얼 0의 개수) 1. 문제와 예제 (문제 링크 : https://www.acmicpc.net/problem/1676) 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 2. 전체 코드 N = int(input()) num = 1 cnt = 0 while (N != 0): # while문이 완료되면 num = N! num *= N N -= 1 while True: if (num % 10 == 0): # 뒤에서부터 0의 개수를 cnt로 셈 cnt += 1 else: break num = num // 10 print(cnt) 3. 코드 해설 매우 간단한 서비스 문제다. 2024. 3. 12.
[백준] 1436번 파이썬 (영화감독 숌) 1. 문제와 예제 (문제 링크 : https://www.acmicpc.net/problem/1436) 1436번: 영화감독 숌 666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워 www.acmicpc.net 1666, 6662, 166669, ... 빠짐없이 체크해야 한다. N의 최댓값이 10000인데 '_ _ _ _ 666'의 경우만 생각해도 종말의 수가 10^4=10000개가 나온다. 따라서 문제에서 준 시간 제한 2초는 1부터 수를 올려가면서 종말의 수를 일일이 찾아도 충분한 시간임을 알 수 있다. 따라서 브루트포스 알고리즘을 사용하면 되겠다. (브루트 포스.. 2024. 3. 12.