1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/87390
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
위의 애니메이션과 같은 규칙이 적용되어 있는 n x n 배열의 각행을 떼어서
n x n 길이의 1차원 배열로 만들었을 때 left부터 right사이의 값을 구하는 문제이다.
2. 풀이
index | 0 | 1 | 2 |
0 | 1 | 2 | 3 |
1 | 2 | 2 | 3 |
2 | 3 | 3 | 3 |
위 n x n 배열의 각 행을 떼어서 1차원 배열로 나타내면 다음과 같다.
index | 0 (0,0) | 1 (0,1) | 2 (0,2) | 3 (1,0) | 4 (1,1) | 5 (1,2) | 6 (2,0) | 7 (2,1) | 8 (2,2) |
value | 1 | 2 | 3 | 2 | 2 | 3 | 3 | 3 | 3 |
규칙을 보면 각 index의 value는 max( (index // n), (index % n)) + 1 임을 알 수 있다.
3. 코드
나의 풀이:
def solution(n, left, right):
answer = []
for i in range (left, right+1):
answer.append(max((i//n), (i % n))+1)
return answer
다른 사람의 풀이:
def solution(n, left, right):
Coord = list(divmod(left, n))
answer = [Coord[1] + 1 if Coord[0] < Coord[1] else Coord[0] + 1]
Coord[1] += 1
for _ in range(left + 1, right + 1):
if Coord[1] >= n:
Coord[0] += 1
Coord[1] = 0
answer.append(Coord[1] + 1 if Coord[0] < Coord[1] else Coord[0] + 1)
Coord[1] += 1
return answer
친구의 코드가 조금더 복잡하긴 하지만 더 개연성 있는 느낌이다.
'코딩 테스트 연습 > 프로그래머스' 카테고리의 다른 글
[Python]Programmers 행렬의 곱셈(lv2) (0) | 2024.03.18 |
---|---|
[Python]Programmers H-Index(lv2) (0) | 2024.03.17 |
[Python]Programmers 할인 행사(lv2) (0) | 2024.03.14 |
[Python]Programmers 연속 부분 수열 합의 개수(lv2) (0) | 2024.03.12 |
[Python]Programmers 귤 고르기(lv2) - Counter (0) | 2024.03.10 |