처음에 생각한 코드 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..
def dfs(): if len(s) == M: print(' '.join(map(str,s))) return for i in range(1, N+1): if i in s: # 가지치기, 이미 선택한 숫자 배제 continue if len(s) > 0: #리스트 안에 존재할 때 if s[-1] > i: #맨 끝 원소가 i보다 작을 때는 넘겨버린다.(오름차순 만들기 위함) continue s.append(i) dfs() #함수호출 s.pop() # 출력 후 return하고 마지막 원소 비우기 N, M = map(int, input().split()) s = [] dfs()
입력 값이 3 5 7 12 라면 무게가 가장 많이 나가는 값은 해당하는 하나의 로프에만 가능하고 가장 작은 무게를 가진 로프는 모든 로프의 개수에 가능 하기 때문에 내림차순 정렬을 해서 인덱스 간의 곱으로 풀이를 했다. 따라서 먼저 sort()함수를 사용하여 오름차순 정렬을 한 다음에 reverse()함수를 사용하여 내림차순으로 정렬을 했다. 그러면 rope = [12, 7, 5]가 되는데, 리스트 인덱스는 0부터 시작하기 때문에 인덱스+1를 해준 값을 각 원소마다 곱해주었다. 이 곱해준 값들을 다 저장해 놓고 최대값을 뽑으면 된다. N = int(input()) rope = [] for i in range(N): rope.append(int(input())) rope.sort() rope.reverse..
1. 일단 모든 조합의 합을 구해서 B보다 같거나 큰것이 있다면 리스트에 넣어준다. 2. 리스트에서 가장 작은 값을 추출하여 B에서 뺀다. from itertools import combinations T = int(input()) #높이가 B 이상인 탑 중에서 높이가 가장 낮은 탑 #조합을 구하여 합이 B보다 큰것의 리스트를 만든다. for tc in range(1,T+1): N, B = map(int,input().split()) # N:점원 수 B:선반의 높이 H = list(map(int,input().split())) over = [] sum_o = [] for i in range(N+1): over.append(list(combinations(H,i))) for j in range(len(ov..
- Total
- Today
- Yesterday
- SSAFY
- 백준
- SWEA
- 알고리즘
- DOM
- 자바
- 싸피
- javascript
- N과M
- 비동기패턴
- git
- Pyhton
- 위클리챌린지2주차
- 안드로이드스튜디오
- vue
- AWS
- SQL
- SSAFY퇴소
- 트리
- 독학
- 배포
- 프로그래머스
- vue.js
- Java
- splide
- 세션 스토리지
- Python
- commit되돌리기
- 파이썬
- django
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |