정렬 10

백준 10814번 나이순 정렬 파이썬

https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net 내 코드 import sys input = sys.stdin.readline N = int(input()) member = [] for i in range(N): x, y = input().split() member.append([int(x), y, i]) result = sorted(member, key = lambda x: (x[0], x[2])) for i in range(N): print(res..

BOJ/Python 2023.01.18

백준 11399번 ATM 파이썬

https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 내 답안 N = int(input()) p = sorted(list(map(int, input().split()))) result = 0 while N != 0: result += p[len(p)-N] * N N -= 1 print(result) 인출이 가장 빠르게 되는 사람 순으로 정렬을 하는 게 핵심 아이디어이다. 예제로 주어진 문제를 풀어본다면 1 1+2 1+2+3 1+2+3+3 1+2+3+3+4 이런 식으로 나타낼 수 ..

BOJ/Python 2022.04.17

백준 1181번 단어 정렬 파이썬

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 내 답안 import sys input = sys.stdin.readline x = list(set([input().rstrip() for _ in range(int(input().rstrip()))])) x.sort() x.sort(key = len) for i in x: print(i) N 개의 단어는 리스트 컨프리헨션으로 간단히 받았다. list(set( [] )) 를 한 이유는 ..

BOJ/Python 2022.04.11

백준 1764번 듣보잡 파이썬

https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 내 답안 import sys input = sys.stdin.readline N, M = map(int, input().rstrip().split()) x = set([input().rstrip() for i in range(N)]) y = set([input().rstrip() for i in range(M)]) z = y & x print(len(z)) for i in sorted(list(..

BOJ/Python 2022.03.18

백준 11651번 좌표정렬하기 2 파이썬

https://www.acmicpc.net/problem/11651 11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 내 답안 import sys input = sys.stdin.readline lst = [] for i in range(int(input())): x, y = map(int, input().split()) lst.append((x, y)) lst.sort(key=lambda a: (a[1], a[0])) for i, j in lst: pri..

BOJ/Python 2022.03.18

백준 11650번 좌표 정렬하기 파이썬

https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 내 답안 import sys input = sys.stdin.readline lst = [] for i in range(int(input())): x, y = map(int, input().split()) lst.append((x, y)) lst.sort() for i, j in lst: print(f'{i} {j}') 리스트에 넣은 튜플들을 ..

BOJ/Python 2022.03.18

백준 1026번 보물 파이썬

https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 내 답안 N = int(input()) x = sorted(list(map(int, input().split()))) y = list(map(int, input().split())) y.sort(reverse = True) cnt = 0 for i in range(N): cnt += x[i]*y[i] print(cnt) 몇번생각을 해보다가 나온 결론은 x 는 오름 차순 정렬 y 는 내림 차..

BOJ/Python 2022.03.09

백준 10989번 수 정렬하기 3 파이썬

https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 답안 import sys n = int(sys.stdin.readline()) count = [0] * 10001 for _ in range(n): count[int(sys.stdin.readline())] += 1 for i in range(1, 10001): # 자연수는 1부터 for j in range(count[i]): print(i) 이 문제를 처음 접근 했을때, 정말 여러 정렬을 많이 사용 했었다. 파이썬..

BOJ/Python 2022.02.09

백준 1302번 베스트셀러 파이썬

https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net lst = [] for i in range(int(input())): lst.append(input()) x = list(set(lst)) # 중복될시 사전순 x.sort() Max = 0 name = '' for i in x: y = lst.count(i) # 분류 if y > Max: Max = y name = i print(name) 핵심은 4번째 줄에 세트로 묶은다음 리스트로 다시 ..

BOJ/Python 2022.01.07

백준 1037번 약수 파이썬

https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net N = input() x = list(map(int,input().split())) x.sort() # 약수 정렬 if len(x) == 1: print(x[0]*x[0]) else: print(x[0]*x[len(x)-1]) N을 활용하여 풀어도 되지만 내 풀이 에서는 N이 필요없는 문제다. 약수의 갯수가 만약 하나라면 무조건 중복될수 밖에 없으니 제곱을 하여 출력을 하고, 여러개라 가정..

BOJ/Python 2021.11.16