[알고리즘]/BOJ

[백준/Python] 2566 최댓값 / 2차원 리스트 입력받기

개발새발주발 2022. 8. 14. 20:14
728x90

1. 문제 

 

2566번: 최댓값

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

www.acmicpc.net

헉 ,, 싶지만 원소 하나하나 탐색하면서 풀어본다 .. ! 

그런데 2차원 리스트 입력받는 법이 뭐더라 ? 

 

2. 배경지식 

[2차원 리스트] 

2차원 리스트는 리스트 속에 리스트가 들어있다고 생각하면 된다.

도식화 해보면 1차원 리스트가 줄이라면 2차원 리스트는 표(1열 표,1행 표 제외)이다.

 

1차원 리스트

list_1d=[0,1,2,3,4,5,6,7]

0 1 2 3 4 5 6 7

2차원 리스트(3행 5열)

list_2d =[[0,1,2,3,4],[a,b,c,d,e],[ㄱ,ㄴ,ㄷ,ㄹ,ㅁ]]

0 1 2 3 4
a b c d e

2차원 리스트 생성(초기화)

mylist=[[0,1,2],[0,1,2],[0,1,2]]
mylist=[[0,1,2,] for i in range(3)]
mylist=[[0,1,2]]*3
mylist=[[i,j]for i in range(2) for j in range(3)]

2차원 리스트는 여러가지 방식으로 생성 및 초기화가 가능하다. 

마지막줄은 다음 포스팅을 참조하였다. 

 

[python] List Comprehension과 Generator Expression

'본 포스팅은 글쓴이 개인의 공부 목적이므로, 틀린 부분이 있다면 댓글로 달아주시면 감사하겠습니다.' 1. List Comprehension이란? 파이썬은 "list comprehension"이라는 개념을 지원한다. 이것은 쉽게 말

minjoos.tistory.com


2차원 리스트 입력 받기 

백준에서 2차원 리스트 입력받는 문제가 많이 나오는데 (아직 얼마 못봤지만) 첫째줄에 리스트의 행, 열이 주어지고 둘째줄부터 데이터가 주어지는 경우가 많았다 ! 

그래서 

2 4          : 2차원 리스트의 행과 열

0 0 0 1    : 행렬의 데이터가 주어짐 

0 1 0 0 

과 같은 자료를 입력받기 위해

n,m = map(int,input().split())

#1. 원소 하나씩 입력받기
mylist=[for _ in range(n)] 
for i in range(n):
    mylist[i]=list(map(int,input().split()))
    
#2. 원소에 list 추가하기
mylist=[]
for i in range(n):
    mylist.append(list(map(int,input().split())))
    
#3. 선언과 동시에 입력받기 
mylist=[list(map(int,input().split()))for _ in range(n)]

대표적인 3가지 방법이 있다 ! 

#1번이 처음에 이해가 잘 안갔다. 그래서 설명해보자면 1차원 리스트(mylist)를 생성한 뒤 행의 개수(n)만큼 빈칸을 채운다. 

이제 for문을 통해 한줄씩 n번 받아서 mylist에 입력되어 있는 값을 채운다는 것이었다 ! 

#2번은 비어있는 mylist에 for문을 통해 한줄씩 n번 입력받은 값을 mylist에 추가한다. (append()함수 이용)

#3번은 #1,#2번 내용인 선언,초기화,입력,추가를 축약한 방법이다. 

 

 

[Python] 2차원 배열

2차원 배열 1차원 list를 묶어놓은 list 세로 길이(행의 개수) = N, 가로 길이(열의 개수) = M 일때 2차원 배열 만들기 arr = [[0] * M for _ in range(N)] # 아래와 같은 경우는 안됨!! # 모든 행이 같은 1차원..

hyunse0.tistory.com

배열에 대한 더 구체적이고 자세한 설명이 있다 ! 

 

3. 구현방안 

  * 구현 방안은 문제를 코드로 해결하기 전, 필자의 생각을 담은 기록용 공간이다. (=스킵해!!)

- 우선 2차원 리스트를 입력받는다.

- 탐색을 통해 원하는 위치의 데이터를 찾는다. 

-max초기 값을 0으로 설정해놓고 원소 하나하나 비교해간다. 

 : 이 부분 구현방법 떠올리고 실행하는게 제일 힘들었다. 열을 한칸씩 옮기고 행도 한칸씩 옮겨야했다! 

 

4. 구현 코드 

max_num=0
col=0
row=0
for i in range(9):
    line = list(map(int,input().split()))
    if max(line)>max_num:
        max_num=max(line)
        col=i
        row=line.index(max_num)
print(max_num)
print(col+1,row+1)

 

5. 오답 및 풀이 

max_num=0
col=0
row=0
for i in range(9):
    line = list(map(int,input().split()))
    if max(line)>max_num:
        max_num=max(line)
        col=i+1
        row=line.index(max_num)+1
print(max_num)
print(col,row)

처음 짠 코드다. 여기서 계속 '틀렸습니다' , '런타임 에러'가 떴는데 아마 for문 안에 +1이 있어서 그런것 같다 ..! 

재제출해서 맞은 코드처럼 +1을 밖으로 빼버리니 해결되었다.