-
programmers.co.kr/learn/courses/30/lessons/68645
문제 설명
정수 n이 매개변수로 주어집니다. 다음 그림과 같이 밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행한 후, 첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return 하도록 solution 함수를 완성해주세요.
def solution(n): lis = [[0 for _ in range(n)] for _ in range(n)] y, x = -1, 0 num = 1 for i in range(n): for j in range(i, n): if i%3 == 0: y +=1 elif i%3 == 1: x +=1 elif i%3 == 2: y-=1 x-=1 lis[y][x] = num num+=1 res = [] for i in lis: for j in i: if j !=0: res.append(j) return res
삼각형 특성상 이동 방법이 ↙ → ↖라는걸 이용한 방법이였다.
내친김에 그냥 달팽이도 연습해봤다.
더 쉬웠다.
s를 이용해서 방향을 바꾸어주고 x++ 방향 y++ 방향 그다음엔 *(-1)이여서 x-- y-- 방향으로
이때 k, 즉 달팽이 크기의 수를 점점 줄여야한다.
백준에도 같은 문제가 있었다.
num = int(input()) findNum = int(input()) data = [[0]* num for i in range(num)] n = num**2 + 1 s = 1 i = -1 j = 0 k = num while True: for p in range(1, k+1): n -= 1 i += s data[i][j] = n k -= 1 if k <= 0: break for p in range(1, k+1): n -= 1 j += s data[i][j] = n s*= -1 res = [0,0] for i in range(len(data)): for j in range(len(data[0])): print(data[i][j], end=' ') if data[i][j] == findNum: res[0], res[1] = i+1, j+1 print() print(res[0],res[1])
'2020년 > 코테' 카테고리의 다른 글
[leetcode]Smallest Integer Divisible by K (0) 2020.11.25 [코테 연습] 큰 수 만들기 (0) 2020.10.18 [프로그래머스 Lv1,Lv2 다풀기 프로젝트] 소수찾기 (0) 2020.10.04 [프로그래머스 Lv1,Lv2 다풀기 프로젝트] 2016년 (0) 2020.10.03 [leetcode 추석맞이 3문제] minimum-absolute-, differencerepeated-dna-sequences, pseudo-palindromic-paths-in-a-binary-tree (0) 2020.10.01