인프런 커뮤니티 질문&답변

김민섭님의 프로필 이미지

작성한 질문수

세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)

강의 내용 BOJ3085 질문 있습니다

해결된 질문

24.07.06 20:43 작성

·

143

0

변화만 생기는 곳만 체크한다고 하셨는데, 예로 들어 한 행의 두 원소를 바꾸면 그 두 원소의 열과 그 행을 살펴보면 된다고 하셨는데,

 

def get_best(y, x):

global N, matrix

best = 0

# columns

bef = '-'

value = 0

for j in range(N):

if bef == matrix[y][j]:

value += 1

else:

value = 1

bef = matrix[y][j]

best = max(best, value)

# rows

bef = '-'

value = 0

for i in range(N):

if bef == matrix[i][x]:

value += 1

else:

value = 1

bef = matrix[i][x]

best = max(best, value)

return best

 

왜 바꾼 원소 기준으로 그 원소 위치의 하나의 행과 열만 보는걸로 코드를 짜셨나요?

설명과 코드가 달라서 약간 이해가 안 갑니다 ㅜ

답변 2

0

알리 Ally님의 프로필 이미지
알리 Ally
지식공유자

2024. 07. 08. 22:25

안녕하세요 김민섭님!

 

강의 설명에서 변화되는 곳을 체크하려면 두 원소의 열과 행을 살펴보면 된다고 말씀드렸습니다.

하지만 코드는 바꾼 원소 기준으로 하나의 행과 열만 체크하는 방식으로 구현하였는데요.

 

그 이유는 전체 보드를 탐색하며 각 원소의 4방향을 탐색하기 때문입니다.

예를 들어 'CP'에서 'PC'로 전환되는 경우는, 원소 C에서 4방향 탐색을하여 P와 전환된 경우와 원소 P에서 4방향 탐색을하여 C와 전환된 경우 2가지 케이스가 있습니다.

두 케이스가 진행되면서 결국 강의에서 설명드린 두 원소의 열과 행이 모두 체크됩니다.

때문에 보드 전체를 탐색하는 과정에서 전환되는 원소를 기준으로 하나의 행과 열만 체크하면 되는 원리입니다.

 

colums, rows 주석은 말씀하신대로 해석하면 주석을 바꾸는 것이 맞는데요.

또 다르게 해석하면 colum 여러 개(colums)를 탐색하여 하나의 row를 본다는 의미로도 볼 수 있기 때문에, 이 부분은 고민 후 좀 더 적절한 표현으로 반영하겠습니다.

 

제 강의가 도움이 되셨다니, 뿌듯하네요.

남은 강의도 응원하겠습니다.

 

또 궁금하신 점 있으시면 언제든 질문 부탁드립니다.

감사합니다. :)

0

김민섭님의 프로필 이미지
김민섭
질문자

2024. 07. 06. 20:46

추가로 주석에 column된 부분은 열을 확인하는거인데, 코드 상에서는 x축을 쭉 흝으면서 같은 값으로 이루어진 연속된 길이를 구하고 있습니다. 이 부분 주석은 row로 바꿔야하는거 아닌가요?? 답변 기다리겠습니다 큰 도움 되고 있습니다 ㅎ