일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- data communication
- Reversing
- 러스트 프로그래밍 공식 가이드
- 자바 기초
- Database
- 데이터베이스
- Python
- 데이터 통신
- 자바 개념
- 러스트 예제
- 우분투
- 파이썬 첼린지
- 백준 러스트
- ubuntu
- 오라클
- 파이썬 알고리즘
- Operating System
- OS
- 알고리즘
- C
- 파이썬 챌린지
- Rust
- 오라클DB
- 백준
- 러스트
- 자바
- java
- 운영체제
- Python challenge
- 파이썬
Archives
- Today
- Total
IT’s Portfolio
[Python] 코딩도장 - Spiral Array 본문
728x90
반응형
def SpiralArray(X, Y):
sa_list = [[0 for x in range(X)] for y in range(Y)]
'''
count : 0부터 X*Y-1의 값을 차례로 저장할 변수
flag : 진행방향을 정할 변수
'''
count = 0
flag = 0
i, j = 0, 0
while True:
'''
flag가 0일 때 오른쪽으로 진행
배열에 count 값을 넣고 오른쪽으로 진행되니 j 값이 1씩 증가해야함.
count 값은 사용했으니 1 증가
반복문을 돌리다가 j 값이 Y와 같아지거나(배열 인덱스 값이 맞지 않을 때) 배열 내의 값이 0이 아닐 때
j의 값을 1 감소시켜 전 배열 인덱스로 돌아간 후 i의 값을 1 증가시켜 다음 배열로 넘어간다.
flag의 값을 1로 정의한다.
flag가 1일 때 아래쪽으로 진행
flag가 2일 때 왼쪽으로 진행
flag가 3일 때 위쪽으로 진행
'''
if flag == 0:
sa_list[i][j] = count
j+=1
count+=1
if j == Y or sa_list[i][j] != 0:
j-=1
i+=1
flag = 1
elif flag == 1:
sa_list[i][j] = count
i+=1
count+=1
if i == X or sa_list[i][j] != 0:
i-=1
j-=1
flag = 2
elif flag == 2:
sa_list[i][j] = count
j-=1
count+=1
if j == -1 or sa_list[i][j] != 0:
i-=1
j+=1
flag = 3
elif flag == 3:
sa_list[i][j] = count
i-=1
count+=1
if i == 0 or sa_list[i][j] != 0:
i+=1
j+=1
flag = 0
# 만약 count가 X*Y의 값과 같아질 때 while문 break
if count == X*Y:
break
# 2차원 배열 원소 출력하기
for k1 in sa_list:
for k2 in k1:
print(k2, "\t", end='')
print()
if __name__ == '__main__':
X, Y = map(int, input("입력: ").split(" "))
SpiralArray(X, Y)
* map : 리스트의 요소를 지정된 함수로 처리해주는 함수(원본 리스트를 변경하지 않고 새 리스트를 생성)
728x90
반응형
'Development Study > Python' 카테고리의 다른 글
[Python] Zoom 채팅 출석을 위한 매크로 (0) | 2020.11.29 |
---|---|
[Python] 파이썬의 문자열 포메팅 (0) | 2020.11.29 |
[Python] 코딩도장 - 넥슨 입사문제 중에서 (0) | 2020.06.11 |
[Python] 하위 디렉터리 검색 (sys 라이브러리 응용) (0) | 2020.06.10 |
[Python] 간단한 메모장 스크립트 만들기 (0) | 2020.06.07 |
Comments