부끄럽게도 정답률이 꽤 높은 문제임에도 불구하고 시간이 꽤 걸렸던 문제이다.

90이라는 max 값을 구하기는 상당히 쉬운데, 행열을 출력하는 부분 때문에 조금 난항을 겪었다.

다음 코드처럼 나는 작성했더니 결과가 잘 나왔다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
arr = []
maxN = [0]
for i in range(9):
    arr.append(list(map(int, sys.stdin.readline().split())))
for i in range(9):
    for j in range(9):
        if max(arr[i]) == arr[i][j] and max(arr[i])>=maxN[0]:
            maxN.pop()
            maxN.append(arr[i][j])
            i_num = i
            j_num = j
        else:
            pass
print(maxN[0])
print(i_num+1, j_num+1)
cs

 

딱 봐도 자랑스럽게 내세울만한 코드는 아니다... 오히려 지저분한 코드라는 생각이 확실히 들긴 한다.

 

리스트를 꽤 많이 사용했다. 

도저히 어떻게 list에 값을 넣지 않고 처리를 해야 할지 생각이 안 나서 저렇게 maxN처럼 전역변수처럼 리스트를 처리해서 해당 값을 이중 for문 내에 있는 if문의 조건에 따라 업데이트시키는(line 8~) 방법을 사용했다.

 

그리고 딱 봐도 for문에 이중for문까지 있어서 시간 복잡도가 O(n^2)이 나와서 시간 초과가 될 것 같았다.

그래서 line 4에서와 같이 input()을 사용하지 않고 sys.stdin.readline()를 사용해서 처리했다.

그렇게 처리할 경우, 다음과 같은 실행시간이 나와서 잘 처리가 되었다.

해당 코드의 실행시간

추후에 다시 이 코드로 돌아와서 조금 더 깔끔한 코드를 손봐줄 필요성이 강하게 느껴진다...

 

 

문제 출처: https://www.acmicpc.net/problem/2566

 

2566번: 최댓값

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

www.acmicpc.net

+ Recent posts