AtCoder Beginner Contest 305 ABC C - Snuke the Cookie Picker の解説

atcoder.jp

・説明:与えられたマップに対して行ごとと列ごとに'#'の数を求める。'#'の数は必ずどこかの行、列で他の行、列より1小さい。よって行、列毎に'#'の最大値を取り、その数-1の値がある行と列を求めれば良い。


・実装例

h,w=map(int,input().split())
s=[input()for _ in range(h)]
#print(s)

#行に対して
l=[0 for _ in range(h)]   #行ごとの'#'の数のリスト。l[0]は0行目の'#'の数。
for i in range(h):
  cnt1=0                  #各行の'#'の数。
  for j in range(w):
    if s[i][j]=='#':
      cnt1+=1
  l[i]=cnt1
cnt=max(l)              #クッキーが食べられていない行におけるクッキーの数。
#print(cnt)

#列に対して
l2=[0 for _ in range(w)]  #列ごとの'#'の数のリスト。
for j in range(w):
  cnt2=0                #各列の'#'の数。
  for i in range(h):
    if s[i][j]=='#':
      cnt2+=1
  l2[j]=cnt2
count=max(l2)         #クッキーが食べられていない列におけるクッキーの数。
#print(count)

#クッキーが食べられた行と列の確定。
for i in range(h):
  if l[i]==cnt-1:
    a=i+1
for j in range(w):
  if l2[j]==count-1:
    b=j+1
print(a,b)