일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- list
- 파이썬
- 리스트
- 파이썬문법
- ContentProvider
- Hilt
- 배열
- 자료형
- android
- 백준
- filternotnull()
- Kotlin
- 티스토리챌린지
- programmers
- composelifecycle
- compose
- nullpointerexception방지
- 오블완
- 백준파이썬
- 문자열
- 자바리스트정렬
- disposableeffect
- 자바
- 자바set
- Python
- 프로그래머스
- Provider
- jetpack
- Dependency
- Java
- Today
- Total
목록Practice/Baekjoon (22)
study gomi

내 제출 import sys # 명령의 수 n n = int(input()) # 정수를 저장하는 스택을 구현 stack = list() for _ in range(n): # 해야 할 명령을 정수 형태로 입력으로 받음. x = list(map(int, sys.stdin.readline().split())) # 1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000) if x[0] == 1: stack.append(x[1]) # 2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력. 없다면 -1을 대신 출력한다. elif x[0] == 2: print(stack.pop() if stack else -1) # 3: 스택에 들어있는 정수의 개수를 출력한다. elif x[0] == 3: print(le..

내 제출 - 첫 제출은 틀렸었다(복잡도 n^2인 중첩 for문 쓴 첫 제출 ↓) 더보기 # 창문의 개수와 사람의 수 n이 주어진다. n = int(input()) # 처음에 모든 창문은 닫혀 있다. window = [False] * n for num in range(1, n+1): for i in range(num, n, num): window[i-1] = not window[i-1] print(window.count(True)) - 이 문제 메모리 제한이 64MB다. - 다른 문제는 128MB는 됐는데 작다. 그런데도 나는 for문을 중첩시켜서 계산했다. - 여튼 그래서 N이 매우 큰 경우에는 안 맞는 코드인지 메모리 초과가 떴다. - 사실 정답이 아닌 걸 보고 새 코드를 작성하는 데에 시간이 한참 걸..

내 제출 - 숫자의 범위가 정해져 있어서 에라토스테네스의 체를 써서 전체 소수를 먼저 구해뒀다. (에라토스테네스의 체 설명 참고 : https://taetaegom.tistory.com/39) - 골드바흐의 체 함수 내에서 잘 못 짠 게 있어서 계속 수정을 했다. - 검사해야 하는 수는 그대로 두고 그 수의 절반 값 까지만 소수 -> 빼도 소수인지 확인하면 되는데 첨에 아무 생각 없이 비교 대상이 되는 소수 리스트 목록을 반으로 자르고 1~검사해야 하는 수를 비교했다. 오잉또잉...ㅋ - 그 다음에는 바보같이 break를 달아서 검사중인 숫자가 소수가 아니면 그냥 바로 과정이 끝나버리게 했다. - 여튼... 다시 보니 어려울 게 없는 건데 엄청 헤맸다. def sieve_of_eratosthenes(nu..

내 제출 - 물론 '단계별로 풀기'를 통해 쉬운 것부터 풀고 있긴 하지만... 근래 풀었던 것 중 가장 어려웠다. - 이전에 비슷하게 공약수 찾아서 푸는 문제에서 시간 초과가 떴었어서.. - 어떻게 해야 빠르게 답을 찾아내지...? 가 고민이었음. - 약수, 배수와 소수2 단계에서 이거랑 이전 문제(나무 심는 거였나...?)가 제일 어려운 것 같다. - 물론 코드 작성에 아주 복잡한 알고리즘 등이 필요한 건 아니었는데 접근이 어려운(?!) def is_prime(check_n): if check_n

내 제출 - 종이에 칸 나눠서 나무 위치 표시해보고... 동일 간격을 어떻게 유추해낸 걸까 생각해보니까 어케 어케 풀렸다. - 처음에 틀린 이유는 굳이 더 심을 필요가 없는 경우(나무 2그루)를 생각 못 했었다. - math 라이브러리의 gcd 구하는 메소드를 사용해도 될 것 같다. 나는 연습 차원... - 사실 문제를 이렇게 푸는 건지 긴가민가 해서 코드를 굳이 굳이 길게 작성한 것 같다. # 최대 공약수 구하기 def get_gcd(a, b): while b: if a > b: a, b = b, a b %= a return a # 심어져 있는 가로수의 위치가 주어진다. # 이미 심어져 있는 가로수의 수 N n = int(input()) # 가장 첫 번재 나무 front_tree = int(input(..

내 제출 - 정답이 맞긴 했는데... 뭔가 지저분하다... - 유클리드 호제법으로 구하는 게 익숙하지 않다.. for문이 더 편하다. - for문으로 최대공약수를 구하면 시간 초과가 나온다. # 기약분수의 분자 a와 분모를 뜻하는 b를 입력 받음 a1, origin_b1 = map(int, input().split()) a2, origin_b2 = map(int, input().split()) b1, b2 = origin_b1, origin_b2 b_multiple = b1*b2 while b2: if b1 > b2: b1, b2 = b2, b1 b2 %= b1 # 최소 공배수(lcm) => 이게 두 분수 합의 분모 b_sum = b_multiple // b1 # 두 분자 값의 합 a_sum = a1 *..

내 제출 - 바로 아래 코드는 python - c++ 코드는 이 글 제일 아래에 더보기를 누르면있다. # 첫째 줄에 카드의 개수 n,m이 주어진다. n, m = map(int, input().split()) # 둘째 줄에 카드에 쓰여 있는 수가 주어진다. # 입력 받은 카드들을 index 붙여서 순서대로 놓고 뽑기 위해 list 에 담음. card_list = list(map(int, input().split())) # 합들의 모음 card_sum = set() # 카드 리스트에서 순서대로 앞에서부터 카드 세 장 뽑을 예정 for i in range(len(card_list)-2): # 앞에서 card_list[i]번째까지 선택했으니까 다음 선택은 i+1번째 부터 가능. for j in range(i+1..

내 제출 - 집합(set)을 이용해서 약수들을 구했다. - 결과 출력은 format을 사용 - 입력마다 약수를 구해주어야 하므로 약수를 구하는 함수 작성 -> return은 정렬된 약수 목록 # 완전수? 어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같은 경우 # 약수 구하기 def get_division_sorted(target): set_division = {1} # 자신을 제외한 약수들이 필요 # target//1의 연산 결과인 target 안 넣기 위해 2부터 loop for i in range(2, target // 2+1): if target % i == 0: set_division.add(i) set_division.add(target // i) return sorted(set_divis..