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
#include #include int main() { int n,i,j,k,p=0,q,e=0; scanf("%d",&n); char*a[n],*b[n],*c[n],x[51],y[51]; int d[n]; for(i=0;i 풀이 : map (key - value, value) p : map 에 있는 key 의 개수입니다. 0부터 시작합니다.q : map에 있던 key와 같이 같을 경우 1 그렇지 않으면 0 입니다.e : key개에 정확히 두 개의 value를 가지고 있는 것들의 개수입니다.n : 입력받는 key - value 쌍의 개수입니다.i,j,k : 반복문에서 사용할 index 입니다. x,y : key-value를 문자열 쌍으로 받을 때 사용하는 문자 배열입니다.a,b,c : 각각 key, val..
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은 순서가 없기 때문에 입력한것을 그대로 출력한다고 해도 다르게 나올 수 있다. 그러므로 대부분의 객..
#include int main(void) { int n,c,i,j,x,y,z,g,p=0; scanf("%d %d",&n,&c); int a[n][3]; for(i=0;i>1; while(1) { if(!(g&1)) ++g; for(i=g;i=0;j-=g) { if(z>a[j][2] || (z==a[j][2] && y>=1; } for(i=0;i 풀이 : 집합과 맵 map을 구현하려면 red-black tree을 구현해야 하나, 그정도의 실력은 되지 않으며, 자료가 별로 주어지지 않기 때문에 배열로 가짜 map을 만들었습니다.(탐색시간이 O(n)으로 비효율적입니다) 1. n,c 을 입력받습니다.2. a[n][3] 이라는 배열을 만듭니다. 0번째는 값, 1번째는 들어온 순서 index, 2번째는 ..
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) 이런것은 조건에 위배되므로, 조건을 주어 걸러..

var n,m,i,j,x,g:int64;a:array[0..9999]of integer;beginreadln(n,m); //입력g:=n div 2;n-=1; //shell sort 준비for i:=0 to n do read(a[i]); //책들의 위치들을 배열로 입력받음while 1=1 do begin //shell sort : 오름차순 정렬if (g mod 2)=0 then g+=1;for i:=g to n do beginj:=i-g;x:=a[i];while j>=0 do beginif a[j]>x then a[j+g]:=a[j] else break;j-=g;end;a[j+g]:=x;end;if g=1 then break;g:= g div 2;end;x:=0;n+=1;i:=0; //음수값부터 이동거리 ..
var n,i,j,k,g,x,y,w:int64;a,b:array[0..49]of int64;s:array[0..49]of string;z:string;beginreadln(n);n-=1;for i:=0 to n do readln(s[i]); //문자열 n개 입력 받고 문자열 배열에 저장for i:=0 to n do begin //문자열 한개씩 길이와, 숫자의 합을 구해줌 a[i]:=length(s[i]); //길이 b[i]:=0; //숫자의 합을 담을 배열을 초기화 for j:=1 to a[i] do if (s[i][j]>='0') and (s[i][j]=0 do beginw:=0;if a[j]>x then w:=1 //앞에 있는 것이 더 길이가 길다면else if a[j]=x then begin //..
- Total
- Today
- Yesterday
- 그리디
- PASCAL
- 1835번
- 그래프
- C언어
- 기하학
- 누적합
- DP
- 브루트포스
- Lazy Propagation
- 백준
- 덱
- DFS
- java
- Segment Tree
- XOR
- union
- Krustal
- 스택
- 오프라인 쿼리
- 정렬
- 최대공약수
- BFS
- find
- 플로이드
- 누적 합
- 1835
- 최소 스패닝 트리
- C++
- 세그먼트 트리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |