일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- nestJS
- AWS
- 코딩테스트
- TypeORM
- 구조체배열
- nestjs typeorm
- OpenCV
- nestjs auth
- Nodejs
- 컴포넌트스캔
- 카카오 알고리즘
- 가상면접사례로배우는대규모시스템설계기초
- thymeleaf
- git
- C++
- 시스템호출
- python
- C언어
- 프로그래머스
- spring boot
- 스프링
- 코테
- Spring
- @Component
- 카카오
- 카카오 코테
- 해시
- 알고리즘
- 파이썬
- @Autowired
Archives
- Today
- Total
공부 기록장 💻
[알고리즘] 나무 타이쿤 (삼성SW역량테스트 2021 상반기 오후 1번 기출 - 시뮬레이션) 본문
# CS Study/Algorithms
[알고리즘] 나무 타이쿤 (삼성SW역량테스트 2021 상반기 오후 1번 기출 - 시뮬레이션)
dream_for 2023. 4. 5. 03:18나무 타이쿤
삼성 SW역량테스트 2021 상반기 오후 1번 문제이다.
문제 출처는 아래 코드 트리 링크이다.
https://www.codetree.ai/training-field/frequent-problems/tree-tycoon
dx, dy techinque를 기반으로 한 시뮬레이션 문제로, 백준 기준으로 치면 Gold 5 등급 수준의 기출 문제이다.
def get_nutrition(lib, r, c):
arr = []
n = len(lib[0])
for i in range(r, r - 2, -1):
for j in range(c, c + 2):
n_r, n_c = get_over_grid(i, j, n)
arr.append((n_r, n_c))
return arr
def get_over_grid(a, b, n):
if a >= n:
a = (a - n)
elif a < 0:
a = (n + a)
if b >= n:
b = (b - n)
elif b < 0:
b = (n + b)
return a, b
def move(nutritions, d, p, num):
move_types = [(0, 1), (-1, 1), (-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (1, 1)]
for n in nutritions:
n_r = n[0]
n_c = n[1]
for j in range(p):
n_r += move_types[d - 1][0]
n_c += move_types[d - 1][1]
n[0], n[1] = get_over_grid(n_r, n_c, num)
def inject(lib, nutritions):
for n in nutritions:
lib[n[0]][n[1]] += 1
def get_count_diagnoal(lib, r, c, n):
move_types = [(1, 1), (1, -1), (-1, -1), (-1, 1)]
cnt = 0
for type in move_types:
n_r, n_c = r + type[0], c + type[1]
if n_r < 0 or n_r >= n or n_c < 0 or n_c >= n:
continue
else:
if lib[n_r][n_c] > 0:
cnt += 1
return cnt
def inject_by_diaganoal(lib, nutritions):
num = len(lib[0])
nut_dic = {i: 0 for i in range(len(nutritions))}
for i in range(len(nutritions)):
nut_dic[i] = get_count_diagnoal(lib, nutritions[i][0], nutritions[i][1], num)
for i in range(len(nutritions)):
lib[nutritions[i][0]][nutritions[i][1]] += nut_dic[i]
def cut_and_new(lib, nutritions):
num = len(lib[0])
new_nutritions = []
for i in range(num):
for j in range(num):
if [i, j] not in nutritions and lib[i][j] >= 2:
lib[i][j] -= 2
new_nutritions.append([i, j])
return new_nutritions
def count_libs(lib):
cnt = 0
n = len(lib[0])
for i in range(n):
cnt += sum(lib[i])
return cnt
def solution():
n, m = map(int, input().split())
lib = [list(map(int, input().split())) for _ in range(n)]
nutritions = [[n - 1, 0], [n - 2, 0], [n - 1, 1], [n - 2, 1]]
for _ in range(m):
d, p = map(int, input().split())
move(nutritions, d, p, n)
inject(lib, nutritions)
inject_by_diaganoal(lib, nutritions)
nutritions = cut_and_new(lib, nutritions)
print(count_libs(lib))
solution()
728x90
반응형
'# CS Study > Algorithms' 카테고리의 다른 글
[알고리즘] 네트워크 (프로그래머스 DFS/BFS Level 3) (0) | 2023.04.14 |
---|---|
[알고리즘] 단어 변환 (프로그래머스 DFS/BFS Level 3) (0) | 2023.04.14 |
[알고리즘] 압축 (프로그래머스 2018 Kakao Blind Recruitment) (0) | 2022.10.07 |
[알고리즘] 두 큐 합 같게 만들기 (프로그래머스 2022 Kakao Tech Internship) (0) | 2022.10.04 |
[알고리즘] 튜플 (프로그래머스 2019 Kakao Winter Internship) (0) | 2022.09.25 |
Comments