N = int(input()) #no, no 중복제외하기 위해 set w = set(input()for _ in range(N)) words = list(w) # 사전 순으로 정렬 words.sort() # print(words) # 길이 순으로 정렬 words.sort(key=len) # print(words) for i in range(len(words)): print(words[i]) 처음에는 문제에 나와있는 대로 1.길이가 짧은 순 2. 사전 순 으로 풀어보려고 했는데 마음대로 안됐다. words.sort(key=len) 한다음 words.sort()이렇게 하면 길이 순으로 한게 물거품이 된다. 그래서 그냥 먼저 사전순으로 정렬하고 그것을 다시 길이순으로 정렬을 했다. 그랬더니 되네? 그리고 예제..
원의 방정식 에서 어떤 점을 넣었을 때 반지름^2 보다 작으면 원안에 존재 한다는 점을 이용했다. 시작점 또는 끝점이 원 안에 존재 한다면 cnt += 1을 해준다. 동시에 temp도 += 1 한다. 만약 시작점과 끝점이 같은 원 안에 존재한다면 temp가 2일 것 이므로 cnt -= 2를 해주었다. import sys input = sys.stdin.readline T = int(input()) # 테케 # 행성계 진입/이탈 횟수를 최소화 for tc in range(T): x1, y1, x2, y2 = map(int, input().split()) n = int(input()) # 행성계의 개수 cnt = 0 for i in range(n): temp = 0 cx, cy, r = map(int, in..
n = int(input()) #딕셔너리로 받아서 value를 enter면 1을 넣고 leave면 0으로 바꾼다. #최종으로 1이 있는 키 출력 room = {} for tc in range(1,n+1): name,value = input().split() if value == 'enter': room[name] = 1 else: room[name] = 0 res = [] for key,value in room.items(): if value == 1: #사전 순의 역순으로 한 줄에 한 명씩 출력 res.append(key) res.sort(reverse=True) for i in range(len(res)): print(res[i]) 저번에 풀었던 9375_패션왕 신해빈에서 딕셔너리를 이용해 풀었던 것..
N = int(input()) A = map(int, input().split()) B = map(int,input().split()) A=sorted(A) B=sorted(B,reverse=True) res = 0 for i in range(N): res += A[i]*B[i] print(res) 단순하게 생각했다. 첫 번째 케이스는 오름차순으로 정렬해서 각각 곱해보는 것이다. A : 1 2 3 4 B : 5 6 7 8 이라고 하면 답은 70 두 번째 케이스는 하나는 오름차순 하나는 내림차순으로 해서 곱해보는 것이다. A : 1 2 3 4 B : 8 7 6 5 이라고 하면 답은 60 따라서 최솟값을 구하려면 한열은 오름차순 다른 한 열은 내림차순으로 곱해서 더해주면 된다.
처음에 생각한 코드 from math import gcd def lcm(x,y): return x*y // gcd(x,y) T = int(input()) for tc in range(1,T+1): M,N,x, y = map(int, input().split()) result = -1 # x에 맞춰서 나머지 x일 때를 시작부터 M만큼 주기로 반복 #나머지가 x인 수들만 N으로 나눠서 나머지가 y인것 찾아냄 # 10 12 3 9 일 때 3,13,23,33 에서 12로 나눴을 때 9인것 찾아냄 for num in range(x,lcm(N,M)+1,M): if num % N == y: result = num break print(result) M를 기준으로 나머지가 x 인 것만을 최소 공배수까지 반복문을 돌려보..
문제를 해석해보면 등수가 두가지가 있는데 공동 등수는 없다고 했으므로 하나의 등수를 기준으로 오름차순 정렬을 해놓고 맨 앞의 것을 기준으로 잡는다. 나는 서류심사 성적을 기준으로 잡았고, 면접 성적을 비교하는 방법으로 했다. 기준이 되는 (사각형) 면접 성적보다 숫자가 낮아야 등수가 높다는 뜻이므로 리스트를 순차적으로 반복하면서 작은 수가 나올 때까지 기준을 바꾸지 않는다. 작은 수가 나오면 카운트를 해주고 기준을 갱신해준다. 마지막으로 카운트 개수를 출력하면 됨 # 둘 중 하나가 기준 값 보다 순위가 높아야 합격 T = int(input()) for tc in range(1,T+1): N = int(input()) rank = [[]for _ in range(N)] for i in range(N): r..
find_set과 union을 사용하는 문제! 각 노드마다 부모를 가리키키는 리스트를 만들어주고 union연산을 통해 두 집합을 통합시킨다. 뒤에 오는 인자(y)가 부모노드가 된다. 여기서 find_set연산을 하는데, 노드X가 부모노드값과 같으면 노드 x값이 리턴이 되고 아니라면 다시 find_set함수로 들어가서 부모노드를 찾아 리턴시켜준다. 예시로 union(1,2)을 보면 parent =[0,1,2] 이다. parent[find_set(2)] = find_set(1) find_set(2)은 if 2 == parent[2]: return 2 대입하면 union(1,2): parent[2] = find_set(1) 이 되고 find_set(1)은 리턴 1이므로 parent[2] = 1이 되어 pare..
최소 몇 번의 연산을 거쳐야 하는지 알아내는 프로그램이기 때문에 BFS로 푸는 문제이다. deque를 사용해야 시간초과가 생기지 않는 다는 점을 알게 된 문제였다. 그리고 2+1 =3 , 3-1 =2가 반복하여 생길 수 가 있는데 이러한 문제를 예방하기 위해서 연산 결과 숫자를 인덱스로하는 리스트로 visited를 사용했고 방문했다고 처리해줬다. from collections import deque # 연산: +1, -1, *2, -10 네 가지 # 큐에 숫자연산결과와 횟수 함께 넣기 def oper(): global result while Q: #큐가 비어있지 않으면 front, check = Q.popleft() if front == M: result = check return #함수 종료 for i..
- Total
- Today
- Yesterday
- splide
- 비동기패턴
- javascript
- 안드로이드스튜디오
- git
- 알고리즘
- AWS
- django
- 프로그래머스
- Java
- 배포
- 파이썬
- 트리
- 백준
- SSAFY퇴소
- SWEA
- SSAFY
- N과M
- 자바
- vue
- 싸피
- Pyhton
- Python
- DOM
- commit되돌리기
- 위클리챌린지2주차
- 독학
- SQL
- 세션 스토리지
- vue.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |