일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- web
- 프로그래머스
- 협업
- codeup
- 공부
- 리덕스장바구니
- Operating System
- Java
- js to ts
- 토이프로젝트
- 일상
- 기초100제
- Spring
- 코드업
- 분할메모리할당
- react
- react-redux
- 타입스크립트
- 스프링
- 자료구조
- 알고리즘
- 정렬
- error
- CPU 스케줄링
- C++
- memory
- 백준
- OS
- Redux
- 파이썬
- Today
- Total
목록Algorithm (180)
감자튀김 공장🍟
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n, m = map(int, input().split()) board = [list(map(str, input())) for _ in range(n)] res = [] for a in range(n-7): for b in range(m-7): w_count = 0 b_count = 0 for i in range(a, a+8): for j in range(b, b+8): if (i + j) % 2 == 0: # 0,1로 구분해 b,w 중 어떤 것을 색칠할 것인지 구분 if board[i][j] != 'W': # B이면 w_count += 1 # W로 색칠 else: # W이면 b_count += 1 # B로 색칠 else..
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) person = [list(map(int, input().split())) for _ in range(n)] res = [] for i in range(n): count = 0 for j in range(n): if person[i][0] < person[j][0] and person[i][1] < person[j][1]: count += 1 res.append(count + 1) print(*res) ✔ 설명 자신을 포함하여 키와 몸무게를 다른 사람과 비교한다. 키와 몸무게 둘 다 자신보다 클 경우, count += 1을 하면 된다. ✔ 후기 등수가 왜 이렇게 나오는지 잘 이해가 안됐다...
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline n = int(input()) res = 0 for i in range(1, n+1): num = list(map(int, str(i))) res = i + sum(num) if res == n: print(i) break if i == n: print(0) break ✔ 설명 예제 입력 1을 보면 216을 입력 받았는데 왜 답이 198이냐? 싶을 수 있다. 보면 198 + 1 + 9 + 8 = 216 이기 때문에 198이 216의 가장 작은 분해합이다. 따라서 n을 입력받고 1부터 n까지 for문을 돌려서 현재 i의 각 자리수 + i 를 더한 값이 n과 같다면 해당 값을 출력하면 된다. ✔ 후기 예시가 3자리 수라서 ..
✔ 문제 ✔ 풀이 import sys from itertools import combinations input = sys.stdin.readline n, m = map(int, input().split()) numbers = list(map(int, input().split())) combi = list(combinations(numbers, 3)) sum_combi = [] for i in combi: sum_combi.append(i[0] + i[1] + i[2]) max_n = 0 for i in sum_combi: if max_n < i
✔ 문제 ✔ 풀이 import sys input = sys.stdin.readline def hanoi(x, start, end): if x > 1: hanoi(x-1, start, 6 - start - end) print(start, end) if x > 1: hanoi(x-1, 6 - start - end, end) n = int(input()) print(2**n - 1) hanoi(n, 1, 3) ✔ 설명 하노이탑 규칙과 설명은 아래 유튜브를 참고하면 된다. www.youtube.com/watch?v=FYCGV6F1NuY 6 - start - end 하는 이유가 뭔가 싶었는데 기둥의 번호를 1, 2, 3으로 준다면 기둥의 합이 1+2+3 = 6이라 6으로 주고 시작하는 것이다. 동영상에서 나오는 ..
✔ 문제 ✔ 풀이 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)을 리턴해주면 된다.