일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CPU 스케줄링
- 토이프로젝트
- C++
- Java
- memory
- 협업
- 자료구조
- error
- 스프링
- 공부
- react-redux
- 알고리즘
- Operating System
- 기초100제
- 타입스크립트
- 프로그래머스
- 정렬
- 분할메모리할당
- Spring
- OS
- 일상
- 파이썬
- js to ts
- 코드업
- react
- codeup
- web
- Redux
- 리덕스장바구니
- 백준
- Today
- Total
목록Algorithm (180)
감자튀김 공장🍟
✔ 문제 ✔ 풀이 🤢 틀린 코드 (시간 초과) n = int(input()) nums = [] div = 2 while n >= 0: if n % div == 0: nums.append(div) n = n // div else: div += 1 print(*nums) while문 조건이 잘못된 것 같다. 👻 정답 코드 n = int(input()) nums = [] div = 2 while n != 1: if n % div == 0: nums.append(div) n = n // div else: div += 1 print(*nums) ✔ 설명 예제 입력1을 보면 72를 입력 받고 2 2 2 3 3 을 출력한다. 1. 72 // 2 = 36 2. 36 // 2 = 18 3. 18 // 2 = 9 4. 9..
✔ 문제 ✔ 풀이 m = int(input()) n = int(input()) nums = [] for i in range(m, n+1): if i == 1: continue for j in range(2, int(i**0.5) + 1): if i % j == 0: break else: nums.append(i) if len(nums) == 0: print(-1) else: print(sum(nums)) print(min(nums)) ✔ 설명 1978번과 똑같다. m~n사이의 소수를 찾으면 count += 1을 하는 것이 아니라 nums.append를 하여 해당 범위 내 소수들을 저장한다. 리스트의 길이가 0이 아니라면 nums의 합과 nums의 최소값을 출력하면 된다.
✔ 문제 ✔ 풀이 n = int(input()) nums = list(map(int, input().split())) count = 0 for i in nums: if i == 1: continue for j in range(2, int(i**0.5) + 1): if i % j == 0: break else: count += 1 print(count) ✔ 설명 리스트에 있는 값 중에서 1이 있는 경우는 continue를 사용해 다음 인덱스로 넘어간다. 이중 포문을 사용하여 range는 2부터 해당 인덱스 값에 루트를 씌운 값까지로 설정하고, i % j를 했을 때 0이 나오는 경우는 소수가 아니라고 판단한다. ex) i = 25인 경우 j의 범위는 2 ~ 6까지이다. 25 % 5 == 0 이므로 소수에서 ..
✔ 문제 ✔ 풀이 a, b = map(int, input().split()) print(a + b) ✔ 후기 파이썬 int의 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 이므로 그냥 int형을 사용해도 된다.
✔ 문제 ✔ 풀이 n = int(input()) count = 0 while n >= 0: if n % 5 == 0: count += int(n // 5) print(count) break n -= 3 count += 1 else: print(-1) ✔ 설명 n이 0 이상일때까지 while문을 돌린다. n이 5의 배수가 아닐 경우 n -= 3을 한 후, 5의 배수가 만들어진다면 조건문을 통해 남은 n을 5로 나눈 몫을 count에 더한다. 만약 5의 배수가 계속 나오지 않고 while문의 조건을 만족하지 못하는 경우에는 설탕 3kg와 5kg로 해당 값을 만들 수 없다는 의미이기 때문에 else문을 통해 print(-1)을 실행한다. ✔ 후기 🤔..
✔ 문제 ✔ 풀이 t = int(input()) for _ in range(t): k = int(input()) n = int(input()) people = [i for i in range(1, n+1)] # 0층의 ! ~ n호의 인원 수 for i in range(k): for j in range(1, n): people[j] += people[j-1] print(people[-1]) ✔ 설명 people 리스트에 0층 1~n호까지의 인원수를 저장한다. 층수(k)만큼 반복하며 한 번의 반복마다 n-1호까지 각 층 별의 인원 수를 변경한다. people[1] (2호실) += people[0] (1호실) 인덱스랑 호실이 똑같지 않아서 헷갈릴 수 있다. ✔ 후기 += 사용하지 않고 sum()으로 해결할 수..
✔ 문제 ✔ 풀이 👻 틀린 코드 (예외 처리 부족) t = int(input()) for _ in range(t): h, w, n = map(int, input().split()) y = n % h x = (n // h) + 1 if x < 10: print(y, 0, x, sep='') else: print(y, x, sep='') ⭕ 정답 코드 t = int(input()) for _ in range(t): h, w, n = map(int, input().split()) y = (n % h) * 100 x = n // h if y == 0: y = h * 100 print(y + x) else: print(y + x + 1) ✔ 설명 y가 0일 경우를 생각해야한다. 예를 들어 h가 5일 경우 n이 1..
✔ 문제 ✔ 풀이 👽 틀린 코드 (시간 초과~!) a, b, v = map(int, input().split()) h = 0 cnt = 0 while True: h += a cnt += 1 if h >= v: print(cnt) break else: h -= b ⭕ 정답 코드 a, b, v = map(int, input().split()) h = (v - b) / (a - b) print(int(h) if h == int(h) else int(h) + 1) ✔ 설명 h = (높이 - 저녁h) / (낮h - 저녁h) 라는 공식을 세우면 while문을 계속 돌 필요가 없다. 총 높이에서 밤에 미끄러지는 높이를 빼고, 하루에 총 올라갈 수 있는 거리로 나누면 되는 것이다. h가 정수로 딱 떨어진다면 걸리는 날..
✔ 문제 ✔ 풀이 n = int(input()) l = 1 while n > l: n -= l l += 1 if l % 2 == 0: a = n b = l - n + 1 else: a = l - n + 1 b = n print(a, '/', b, sep='') ✔ 후기 생각보다 더 어렵다.. 대각선끼리 묶어서 생각해야한다는 점이 키 포인트였던 것 같은데, 그걸 못 찾아서 계속 어떻게 풀어야하나 각 입력 숫자들 사이에서 규칙을 계속 찾고 있었다. [1/1], [1/2, 2/1], [3/1, 2/2, 1/3], [4/1, 3/2, 2/3, 1/4] 이렇게 한 대각선에 각 분수들이 들어가게 된다. while문을 돌면서 n이 몇번째 대각선에 들어가야하는지 알아야한다. 다음 if/else 문을 통해서 대각선의 짝..
✔ 문제 ✔ 풀이 n = int(input()) honeycomb = 1 cnt = 1 while n > honeycomb: honeycomb += 6 * cnt cnt += 1 print(cnt) ✔ 설명 먼저 honeycomb 1에서 시작하게 되는데 1번 벌집에서부터의 거리를 따지면 거리 1: 1번 벌집 거리 2: 2~7번 벌집 거리 3: 8~19번 벌집 거리 4: 20~37번 벌집 거리 5: 38~61번 벌집 으로 나뉘어진다. 이를 수식화 하면 (1 + 6 * n)이 되는데 ((거리2 벌집의 개수는 6개, 거리 3은 12개, 거리 4는 18개로 6의 배수로 증가함을 알 수 있기 때문이다.)) 벌집이 n보다 커지기 전까지 계속 while 문을 돌면서 벌집의 숫자를 점차 키워가며 거리를 +1씩 하면 된..