정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
나는 이 문제를 풀지 못했다. 다른 이의 풀이를 첨부한다.
def solution(n):
dx = [0,1,-1]
dy = [1,0,-1]
b = [[0]*i for i in range(1,n+1)]
x, y = 0, 0
num = 1
d = 0
while num <= n*(n+1)//2:
b[y][x] = num
ny = y + dy[d]
nx = x + dx[d]
num += 1
if 0<=ny<n and 0<=nx<=ny and b[ny][nx] ==0:
y,x = ny,nx
else:
d = (d+1)%3
y += dy[d]
x += dx[d]
return sum(b,[])
이렇게 도형같은 것을 이용한 문제는 정말 어려운 것 같다. 항상 느끼지만 아직 나는 한참 멀은 것 같다..ㅎㅎ..ㅎㅎ
선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.
예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.
위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.
선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.
이 문제도 다른 사람의 풀이를 참고했다.
def solution(skill, skill_trees):
answer = 0
for skills in skill_trees:
skill_list = list(skill)
for s in skills:
if s in skill:
if s != skill_list.pop(0):
break
else:
answer += 1
return answer
def solution(skill,skill_tree):
answer=0
for i in skill_tree:
skillist=''
for z in i:
if z in skill:
skillist+=z
if skillist==skill[0:len(skillist)]:
answer+=1
return answer
ㅎㅎ.. level 2 가 왜캐 어렵지... 일단 이번 문제는 잘 생각해보면 풀 수 있는 문제였는데 오히려 어렵게 돌아가다가 못푼 것 같다. 내일은 무조건 한 문제는 내 손으로 풀고싶다.
2022년 4월 12일 - 튜플 lv2 (0) | 2022.04.20 |
---|---|
2022년 4월 11일 - java 8 공부 (1) (Lambda Expression & Method Reference) (0) | 2022.04.20 |
2022년 4월 8일 - 자물쇠와 열쇠 lv3 (0) | 2022.04.20 |
2022년 4월 7일 - 빛의 경로 사이클 lv2 (0) | 2022.04.20 |
2022년 4월 1일 - 해시(1차) lv2 (0) | 2022.04.20 |
댓글 영역