본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #76 리스트 핸들링

by Mr.Algo 2024. 4. 30.
728x90
반응형

[key word] 리스트 내포, 배열, 어레이, 차원, 면 , 행, 열

파이썬 실습창을 열 수 있습니다.실습창 열기

 

 

리스트 핸들링

리스트 핸들링(list handling)은 리스트를 처리하는 것입니다.

  • 리스트 자료구조(data structure)는 확장된 배열입니다. 일반적인 배열(행렬, array, matrix, table)은 같은 형(type), 같은 크기의 data를 일정한 차례나 간격으로 벌여 놓은 것이지만 list는 다른 형, 다른 크기도 함께 늘여놓을 수 있습니다.
  • 리스트는 기본적으로 한 줄로 되어 있는 일차원 구조이지만 리스트 속에 리스트를 사용하는 리스트 내포(list comprehension)로서 높이(면),  줄(행), 칸(열) 등이 있는 다차원 구조도 구성할 수 있습니다.
  • 2차원 리스트 (2-dimensional list)는 개념상 행(row), 열(column)로 구성되고, 3차원 리스트는  면(plane), 행(row), 열(column)로 구성된 입방체입니다. 이러한 배열 형태는 문제 해결에서 많이 사용되는 주요한 자료구조입니다.
  • python에서 module을 호출하면(import array) 전통적인 배열도 사용할 수 있습니다.

1.  2차원 리스트

2차원 리스트 핸들링 연습을 위하여 10행(세로), 10열(가로)의 리스트에 점(dot)을 넣고 출력합시다.

 

n=10 a=[['.']*n for i in range(n)] for i in a: ​​​​w=' '.join(i) # 공백은 3칸 ​​​​print(w)

 

2. 하나의 요소

2행 3열의 요소(element)에 @(at sign)을 넣었습니다.

빨간 별이 있는 곳에도 @을 넣어보세요.

n=10 a=[['.']*n for i in range(n)] a[2][3]='@' # 2행 3열에 @을 넣음 (에이 인덱스 2, 인덱스 삼) for i in a: ​​​​w=' '.join(i) ​​​​print(w)
더보기
n=10 a=[['.']*n for i in range(n)] a[2][3]='@' a[5][2]='@' a[8][5]='@' for i in a: ​​​​w=' '.join(i) ​​​​print(w)

3. 하나의 행과 열

하나의 행 또는 하나의 열로 된 요소에 @을 넣어봅시다.

다음의 예는 3행에 3열부터 5개의 @를 넣은 모습입니다.

빨간 별이 있는 곳에도 @을 넣어보세요.

 

n=10 a=[['.']*n for i in range(n)] for i in range(5): # 5개이므로 5 ​​​​a[3][i+3]='@' # 3행, i+3열에 기록 for i in a: ​​​​w=' '.join(i) ​​​​print(w) ​​​​ ''' 3번과 4번 줄을 다음과 같이 코딩할 수도 있습니다. 그러나 위와 같이 코딩하는 것이 응용성이 좋습니다. for i in range(3,8): ​​​​a[3][i]='@' ​​​​ ​'''

 

더보기
n=10 a=[['.']*n for i in range(n)] for i in range(5): ​​​​a[3][i+3]='@' ​​​​ for i in range(5): ​​​​a[5][i+2]='@' ​​​​ for i in range(5): ​​​​a[i+5][8]='@' # 행이 바뀌고 열 고정 ​​​​ for i in a: ​​​​w=' '.join(i) ​​​​print(w)

4. 대각선

대각선으로 기록한 코드를 참고하여 빨간 별자리에 @를 넣어보세요.

n=10 a=[['.']*n for i in range(n)] for i in range(5): ​​​​a[i][i+2]='@' ​​​​ for i in range(5): ​​​​a[i+5][4-i]='@' # i는 증가, 4-i는 감소 for i in a: ​​​​w=' '.join(i) ​​​​print(w)
더보기
n=10 a=[['.']*n for i in range(n)] for i in range(5): ​​​​a[i][i+2]='@' ​​​​ for i in range(5): ​​​​a[i+5][4-i]='@' ​​​​ for i in range(5): #이곳 추가 ​​​​a[i][i]='@' ​​​​ for i in range(5): #이곳도 추가 ​​​​a[i+5][8-i]='@' for i in a: ​​​​w=' '.join(i) ​​​​print(w)

 

5. 사각형

사각형 기록을 참고하여 빨간 사각형을 완성하세요.

n=10 a=[['.']*n for i in range(n)] for i in range(3): ​​​​for j in range(5): ​​​​​​​​a[i+2][j+3]='@' for i in a: ​​​​w=' '.join(i) ​​​​print(w)

 

더보기
n=10 a=[['.']*n for i in range(n)] for i in range(3): ​​​​for j in range(5): ​​​​​​​​a[i+2][j+3]='@' ​​​​​​​​ for i in range(5): # 5 줄 ​​​​for j in range(3): # 3 칸 ​​​​​​​​a[i+5][j+1]='@' ​​​​​​​​ ​​​​​​​​ for i in a: ​​​​w=' '.join(i) ​​​​print(w)

6. 삼각형

빨간 별 부분을 완성하세요.

n=10 a=[['.']*n for i in range(n)] for i in range(3): ​​​​for j in range(i+1): ​​​​​​a[i+2][j+1]='@' ​​​​​​a[i+1][7-j+1]='@' ​​​​​​​​ for i in a: ​​​​w=' '.join(i) ​​​​print(w)

 

더보기
n=10 a=[['.']*n for i in range(n)] for i in range(3): ​​​​for j in range(i+1): ​​​​​​a[i+2][j+1]='@' ​​​​​​a[i+1][7-j+1]='@' ​​​​​​ for i in range(4): ​​for j in range(i+1): ​​​​​​a[i+6][3-j]='@' ​​​​​​a[i+5][j+6]='@' ​​​​​​​​ for i in a: ​​​​w=' '.join(i) ​​​​print(w)

 

7. 이등변 삼각형

빨간 별 부분을 완성하여 보세요.

n=10 a=[['.']*n for i in range(n)] for i in range(5): ​​for j in range(i*2+1): ​​​​​​a[i+1][5-i+j]='@' ​​​​​​​​ for i in a: ​​​​w=' '.join(i) ​​​​print(w)
더보기
n=10 a=[['.']*n for i in range(n)] for i in range(5): ​​for j in range(i*2+1): ​​​​​​a[i+1][5-i+j]='@' ​​​​​​ for i in range(3): # 3줄 ​​​​for j in range((2-i)*2+1): # @의 개수는 i와 반대 ​​​​​​​​a[i+6][i+2+j]='@' ​​​​​​​​ for i in a: ​​​​w=' '.join(i) ​​​​print(w) ​​​​ ''' ​조금 어렵습니다. ​연구하여 터득하세요. ​'''

 

수고하셨습니다.

더 공부해야할 부분이 있지만 너무 길어져서 생략합니다.

많이 이용되므로 충분히 이해하여야 합니다.

안녕!

728x90
반응형

'알고리듬' 카테고리의 다른 글

[알고리듬] #78 4N 마방진  (2) 2024.05.01
[알고리듬] #77 홀수 마방진  (2) 2024.05.01
[알고리듬] #75 순위 구하기  (1) 2024.04.28
[알고리듬] #74 선택 정렬  (0) 2024.04.27
[알고리듬] #73 버블 정렬  (0) 2024.04.27