[2566] 최댓값

백준 문제 풀이

2566번: 최댓값

  • 해설

      9X9 판에서 몇행 몇열에 최대값이 있는 지 찾는 문제이다.
        
      어떻게 구현할지 생각해보면...
        
      '하나씩 숫자를 탐색하면서 최대값을 찾은 후 해당 격자판에서 최대값과
      같은수가 위치한 행,열을 출력한다.'
        
      라고 생각할 수 있지만, 최대값을 찾는데 전체 탐색, 다시 최대값이 있는
      위치를 찾기위해 전체 탐색으로
        
      총 2번 전체탐색을 하는 것은 비효율적이다.
        
      그렇기 때문에 한가지 생각을 해보면...
      한줄씩 입력을 받기 때문에 한 행당 큰수를 얻을 수 있다. 입력받은 즉시
      큰 값에 대한 위치(index)를 저장시켜둔다.
      nums = []
      point = []
      for i in range(9):
          l = list(map(int, input().split()))
          ml = max(l)
          nums.append(ml)
          point.append(l.index(ml))
        
      이렇게 해두면. nums 에는 한 행당 가장 큰수들이 저장되고, point에는 각
      행의 큰수가 몇번째 열에 있는지 저장된다.
        
      그렇다면 nums에서 큰수는 격자판에서 가장 큰수이고, point에는 큰수들이 몇
      번째 열에 있는지 저장되었기 때문에 큰수의 열을 알 수 있다.
        
      max = max(nums)
      print(max)
      ind = nums.index(max)
      print(ind+1, point[ind]+1)
        
      최대값을 출력하고, 최대값의 행열을 각각 출력하면 된다.
    
  • 답안

      if __name__ == '__main__':
          nums = []
          point = []
          for i in range(9):
              l = list(map(int, input().split()))
              ml = max(l)
              nums.append(ml)
              point.append(l.index(ml))
        
          max = max(nums)
          print(max)
          ind = nums.index(max)
          print(ind+1, point[ind]+1)