일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬
- react-redux
- 협업
- 자료구조
- 토이프로젝트
- Spring
- 프로그래머스
- error
- 스프링
- 일상
- C++
- web
- codeup
- memory
- 알고리즘
- 코드업
- 백준
- js to ts
- 리덕스장바구니
- 공부
- 타입스크립트
- CPU 스케줄링
- Redux
- react
- 분할메모리할당
- Java
- 기초100제
- Operating System
- OS
- 정렬
- Today
- Total
목록알고리즘 (147)
감자튀김 공장🍟
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) def star(x): if x == 3: return ["***", "* *", "***"] arr = star(x // 3) stars = [] for i in arr: stars.append(i * 3) for i in arr: stars.append(i + ' ' * (x // 3) + i) for i in arr: stars.append(i * 3) return stars print('\n'.join(star(n))) ✔ 후기 전에 풀었던 피보나치 같은 재귀는 쉽게 풀었는데 이번 문제는 어려웠다. 구글링 해서 정답 코드를 보긴 했지만... ^_ㅠ 제일 작은 패턴은 n = 3일 때부..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline def merge_sort(arr, p, r): if p < r and count
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) def recursion(s, l, r): global count count += 1 if l >= r: return 1 elif s[l] != s[r]: return 0 else: return recursion(s, l+1, r-1) def isPalindrome(s): return recursion(s, 0, len(s)-1) for i in range(n): count = 0 print(isPalindrome(input().rstrip()), count) ✔ 후기 재귀 코드는 문제에서 주어졌으니 구해야하는 것은 함수가 재귀된 값을 구하는 것인데 global을 사용해 count를 전역 ..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) def fibonacci(x): if x == 0: return 0 elif x == 1: return 1 else: return fibonacci(x-1) + fibonacci(x-2) print(fibonacci(n)) ✔ 설명 F(n) = F(n-1) + F(n-2) 이므로 0, 1일때는 각각 0, 1을 리턴하고 나머지 수는 공식을 리턴하면 된다.
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline def factorial(x): if x == 0 or x == 1: return 1 else: return x * factorial(x-1) n = int(input()) print(factorial(n)) ✔ 설명 0! = 1 1! = 1 2! = 2 * (2 - 1)! 3! = 3 * 2 * 1 = 3 * (3 - 1)! 4! = 4 * 3 * 2 * 1 = 4 * (4 - 1)! . . . 팩토리얼 함수를 만든 후 x 값이 0 또는 1이면 1을 리턴하고 이를 제외하고서는 x * factorial(x-1)을 리턴해주면 된다.
✔ 문제 ✔ 풀이 🙄 틀린 코드 (시간 초과) n = int(input()) nums = list(map(int, input().split())) res = [0] * n for i in range(len(nums)): c = 0 for j in range(len(nums)): if nums[i] > nums[j]: c += 1 res[i] = c print(res) 이중 for문 돌면서 해당 nums[i]보다 작은 수를 count 해서 res 배열에 저장했는데 입력받을 수 있는 수의 범위가 굉장히 크다보니 이중 for문은 시간 초과가 되는 것 같다. 😎 정답 코드 import sys input = sys.stdin.readline n = int(input()) nums = list(map(int, in..
✔ 문제 ✔ 풀이 n = int(input()) members = [list(map(str, input().split())) for _ in range(n)] members.sort(key=lambda x: int(x[0])) for i in members: print(*i) ✔ 설명 members[i][0] 을 기준으로 정렬한다. 만약 나이가 같다면 먼저 가입한 순으로 정렬이 되야하는데 굳이 이를 위해 따로 정렬을 할 필요는 없다. 이미 가입한 순으로 정렬이 되어있는 셈이기 떄문이다.
✔ 문제 ✔ 풀이 😂 나의 정답 코드 (1540ms) import sys input = sys.stdin.readline n = int(input()) s = [] s_len = [] for i in range(n): x = input().rstrip() if x in s: continue s.append(x) s_len.append([x, len(x)]) s_len.sort(key=lambda x: (x[1], x[0])) for i in s_len: print(i[0]) 굳이 s의 길이만 저장한 리스트를 따로 만들고 그걸 또 lambda로 정렬했다 sys를 쓰면 뭐합니까,, 느린걸요..? 1540ms 나온거 보고 진짜 눈이 튀어나올 뻔 😉 다른 정답 코드 (208ms) n = int(input()) ..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) nums = [list(map(int, input().split())) for _ in range(n)] nums.sort(key=lambda x: (x[1], x[0])) for i in nums: print(*i, end=' ') print() ✔ 설명 11650이랑 비슷한 문제이다. 이제 x좌표를 기준으로 정렬하는 것이 아니라 y좌표를 기준으로 정렬하는 것이기 때문에 nums.sort(key=lambda x: (x[1], x[0])) 을 사용한다. y좌표가 같을 경우에는 x좌표가 증가하는 순서로 정렬하기 때문에 x:x[1]이 아니라 x:(x[1], x[0])을 사용하면 된다.
✔ 문제 ✔ 풀이 🥐 나의 정답 코드 import sys input = sys.stdin.readline n = int(input()) nums = [list(map(int, input().split())) for _ in range(n)] nums.sort(key=lambda x: (x[0], x[1])) for i in nums: print(*i, end=' ') print() 🍛 다른 정답 코드 n = int(input()) number_list = [list(map(int, input().split())) for _ in range(n)] number_list.sort() for i, j in number_list: print(i, j) ✔ 후기 이차원 배열 정렬은 lamda을 이용하는 방법이 있..