오늘은 counter 함수를 설명하겠다. 관련된 문제로는 백준의 #11652 카드 문제가 있다. 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지 www.acmicpc.net 우선 나는 맨처음에 그냥 딕셔너리를 내가 만들어서 숫자의 개수를 세줬는데 이 기능을 그대로 해주는 함수가 있었다. collections 모듈의 counter 함수이다. 당연히 코드 맨윗줄에 모듈을 먼저 불러와야 하므로 import를 을 해줘야 한다 from collections import counter 위에서도 설명했지만 그냥 아래의 기능을 한 줄로 가능하게 하..
코딩테스트
[카드]-11652번 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지 www.acmicpc.net My answer import sys n=int(sys.stdin.readline()) board=dict() for i in range(n): tmp=int(sys.stdin.readline()) if(tmp not in board): board[tmp]=1 else: board[tmp]+=1 board=sorted(board.items(),key=lambda x:(-x[1],x[0])) print(board) Another answe..
[국영수]-10825번 My answer import sys n=int(sys.stdin.readline()) tmp=[] for i in range(n): tmp.append(sys.stdin.readline().rstrip().split()) tmp=sorted(tmp,key=lambda x:(-int(x[1]),int(x[2]),-int(x[3]),x[0])) for i in tmp: print(i[0]) Another answer for i in sorted([input().split()for _ in' '*int(input())],key=lambda x:(-int(x[1]),int(x[2]),-int(x[3]),x[0])): print(i[0])
문제 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 www.acmicpc.net My answer import sys input = sys.stdin.readline n = int(input()) info = [] for i in range(n): age, name = input().rstrip().split() info.append([int(age), name]) info.sort(key=lambda x: x[0]) for i in info: print(*i) Another answer print(*sorted([*open(0)][1:],k..
문제 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net My answer import sys input = sys.stdin.readline n = int(input()) loc = [] for i in range(n): loc.append(list(map(int, input().split()))) loc.sort(key=lambda x: (x[0], x[1])) for i in loc: print(*i) Another answer n = int(input()..
[합]-8393번 8393번: 합 n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오. www.acmicpc.net My answer print(sum([i for i in range(int(input())+1)])) Another answer n=int(input()) print(int(n*(n+1)/2)) -------------------- n=int(input());print(n*-~n//2) 더보기 나는 문제 그대로를 의미해서 sum함수를 이용해서 풀었고 아래는 가우스 함수를 이용하였다 이렇게 1~n까지의 합을 구할 때 가우스 공식보다 빠른건 없는 것 같다. 그냥 시간복잡도가 O(1)이다. 아래 코드에서 (-~n)의 의미는 (n+1)을 의미한다. ~는 2의보수를 취하는 방법으로 ..