import sysx = sys.stdin.read().splitlines()d={}c=0for y in x: c+=1 if y in d: d[y]+=1 else: d[y]=1d=sorted(d.items())for y,z in d: print("%s %.4f"%(y,(100*z)/c))풀이 : map (key-value) map에 없던 key라면 value값을 1로 한 채로 집어넣습니다.map에 있다면 value값을 1증가시킵니다.또한 입력받은 문자열의 개수도 구해놓습니다. map을 사전순으로 key를 정렬한다음이름과 이때의 나무가 차지하고 있는 %를 소수점 네자리까지 출력하면 됩니다. https://www.acmicpc.net/problem/4358
a = input()b = len(a)def f(x): c=set() for y in range(b-x): c.add(a[y:x+y+1]) return len(c)d = 0for x in range(b): d+=f(x)print(d) 풀이 : set (집합) python 의 set은 중복이 아닌 값들로만 이루어져 있습니다.즉 처음 입력받은 문자열을 쪼개서 set에 집어넣으면 자연스레 중복이 아닌 값들만 남게 되고, 이 set의 길이가 중복이 아닌 문자열들의 개수임을 알 수 있습니다. 여기서는 함수를 사용하여특정 길이끼리만을 비교하도록 했습니다. (길이가 1인것들, 길이가 2인것들,... 끼리만 서로 비교)이렇게 해야 속도가 더욱 빨라집니다. https://www.acmi..
c=0n = int(input())for x in (input() for _ in range(n)): if x=="ENTER": a={} else: if not(x in a): a[x]=1 c+=1print(c) 풀이 : 집합 (key-value) ENTER가 들어오면 a라는 dict을 만들고그외의 문자열이 들어오면, a에 이미 있던 key인지를 확인하고 그렇지 않다면 dict에 추가한 다음, c을 1증가시켜줍니다. 여기서 c은 곰곰티콘이 사용된 횟수 을 의미합니다. https://www.acmicpc.net/problem/25192
n,m = map(int, input().split())a = {int(x) for x in input().split()}b = {int(x) for x in input().split()}a-=bprint(len(a))if len(a)>0: print(*sorted(a)) 풀이 : set(집합) python에서 set(집합)은 중복된 데이터가 없고, 순서가 없는 데이터 구조이다.보통 a = {1,2,3} 이런식으로 초기화 하나, a={} 이것은 dict (map) 이므로 주의해야 한다. List Comprehension 이 [] 라면Set Comprehension 은 {} 으로 만들 수 있다. set은 순서가 없기 때문에 입력한것을 그대로 출력한다고 해도 다르게 나올 수 있다. 그러므로 대부분의 객..
n = int(input())a = [(s,int(x),int(y),int(z)) for s,x,y,z in (input().split() for _ in range(n))]a.sort(key = lambda x : (-x[1],x[2],-x[3],x[0]))for x in a: print(x[0]) 풀이 : 정렬List Comprehension 으로 입력받은 것을 (문자열, 정수, 정수, 정수)의 튜플 형태로 리스트에 집어 넣은 다음에국어 점수 (내림차순), 영어점수 (오름차순), 수학점수 (내림차순), 이름 (오름차순) 으로 정렬후 튜플에서 이름만 가져와서 출력했다.
n = int(input())a = [int(input()) for _ in range(n)]a.sort(reverse=True)b = 0for i in range(n): if a[i]-i>0: b+=a[i]-iprint(b) 풀이 : 정렬1. n을 입력받습니다.2. n개의 (개행문자로 구별된) 정수들을 입력받으면서 리스트를 만듭니다.3. 리스트를 내림차순 정렬합니다.4. b = 05. 각각의 팁을 계산하고 누적합니다.6. 팁의 합산을 출력합니다. https://www.acmicpc.net/problem/1758
n = int(input())a = list(map(int, input().split()))a.sort()c = 0d = 0e = 0while ea[e]: //더 크다면 r-=1 else: //더 작다면 l+=1 e+=1print(d) 풀이 : 정렬, 두 포인터 1. n을 입력받고 n개의 정수들을 입력받고 정렬합니다.2. 첫번째 수부터 자신이 아닌 다른 수 2개의 합으로 같은 값을 만들수 있는 지를 두 포인터로 확인해 봅니다. 주의) 자신이 아닌 다른수 2개의 합이므로, 입력받은 두개의 수로 자신과 같은 값을 만들었다 한들, 자신 + 다른수 = 자신 (ex : 5 + 0 = 5) 이런것은 조건에 위배되므로, 조건을 주어 걸러..

t = int(input())n = int(input())a = list(map(int,input().split()))a.sort()a = [abs(b-a) for a,b in zip(a,a[1:])]a.sort()print(sum(a[0:t-n])) 풀이 : 정렬1. 집의 좌표를 오름차순으로 정렬합니다 (내림차순도 상관없습니다)2. 각 집끼리의 차이를 (음의 정수가 아닌 정수로) 계산합니다. 만약 같은 좌표라면 결과는 0입니다3. 2에서 구한 차이들을 또 정렬합니다.4. 가장 큰 차이부터 (집중국의 개수 -1) 만큼 제거합니다.5. 4에서 남아있는 차이들의 합이 답입니다. 4에서 제거한다는 것은 위의 그림을 보면 새로운 집중국을 설치하는것으로 여길수 있습니다0 1 1 2 2 3 에서 (집중국 1개)0 ..
t = int(input())while t>0: t-=1 n,k = map(int,input().split()) a = list(map(int,input().split())) a.sort() l=0 r=n-1 c=0 d=0 e=2e8 while l0: c=0 e=0 c+=1 l+=1 r-=1 else: if abs(k-d)k: r-=1 print(c) 풀이 : 정렬, 두 포인터 1. 리스트로 입력받은것들을 담아논다음, 오름차순 정렬을 합니다2. 두 포인터(l,r)을 준비하고, ..
- Total
- Today
- Yesterday
- 브루트포스
- 1835
- 덱
- Segment Tree
- C언어
- java
- C++
- DFS
- 백준
- 최소 스패닝 트리
- XOR
- Krustal
- 최대공약수
- BFS
- 정렬
- Lazy Propagation
- 1835번
- 누적 합
- 세그먼트 트리
- 그리디
- DP
- 누적합
- 그래프
- 스택
- 오프라인 쿼리
- find
- 기하학
- union
- PASCAL
- 플로이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |