42desix   4년 전

다음 M개의 줄에는 상도가 심은 나무의 정보를 나타내는 세 정수 x, y, z가 주어진다. 처음 두 개의 정수는 나무의 위치 (x, y)를 의미하고, 마지막 정수는 그 나무의 나이를 의미한다.

이 부분에서 x를 행의 인덱스(세로 인덱스), y를 열의 인덱스(가로 인덱스)로 보고 풀어야 정답처리가 되는데요, 그에 대한 언급이 어디에도 없습니다.

첫번째 원소가 행이고 두번째 원소가 열인 배열은 A일 뿐, 저 x, y는 그와 독립적으로 주어지는 값입니다. 따라서 거꾸로 주어져도 이상할 게 없죠. 굳이 x, y라고 되어있다면 '(열, 행)의 순서로 주어지는구나'라고 생각하는 게 전혀 이상하지 않아보입니다.

삼성 역량테스트 문제는 사람들의 기억에 의해 복원되는 것으로 알고 있습니다. 실제 시험에서 저렇게 x, y가 뭔지 알려주지 않고 출제되었다는 게 확실하다면 어쩔 수 없고, 실제 연습할 때도 바뀌었을 가능성을 염두에 두고 두 번씩 제출해봐야겠지만, 그게 아니라면 수정이 꼭 필요한 부분이라고 생각합니다. 

djm03178   4년 전

"각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수이다. r과 c는 1부터 시작한다."

따라서 (x, y)라고 썼으면 x가 가장 위에서부터 떨어진 칸의 개수, y가 가장 왼쪽으로부터 떨어진 칸의 개수입니다. 문제될 것이 있나요?

42desix   4년 전

그건 r과 c에 대한 설명일 뿐 x, y에 대한 설명일 것이라고 추측하기는 어렵다고 생각합니다.

다음 M개의 줄에는 상도가 심은 나무의 정보를 나타내는 세 정수 x, y, z가 주어진다. 처음 두 개의 정수는 나무의 위치 (x, y)를 의미하고, 마지막 정수는 그 나무의 나이를 의미한다. 

이 부분을 다음과 같이 바꾼다면 오해의 소지가 없을 것입니다.

다음 M개의 줄에는 상도가 심은 나무의 정보를 나타내는 세 정수 r, c, z가 주어진다. 처음 두 개의 정수는 나무의 위치 (r, c)를 의미하고, 마지막 정수는 그 나무의 나이를 의미한다.

djm03178   4년 전

전혀 어렵지 않습니다. 여기에서 쓰인 r, c는 순서쌍의 각 자리에 들어가는 값이 어떤 값인지 설명하기 위해 지은 이름일 뿐이고, 실제로 그 위치에 어떤 값이 들어갈지는 이후에 결정되는 것입니다.

이걸 문제를 삼으신다는 건 아래와 같은 코드도 변수명을 이상하게 사용한 거라고 말씀하시는 것과 똑같습니다.

42desix   4년 전

r과 c는 양분을 얼마를 줘야 하는지 나타내는 배열인 A의 인덱스를 나타내기 위해 쓴 값입니다.

반면, x와 y는 나무의 좌표를 받기 위한 값이구요.

올려주신 코드에서는 x와 y가 함수 f에 들어가기 때문에 문제가 되지 않습니다. x와 y가 r과 c에 대응된다는 충분한 근거가 주어진 상황이기 때문이죠.

하지만 문제의 설명에서는 두 입력이 같은 순서여야 한다는 보장이 그 어디에도 나와있지 않습니다. 코드로 나타내면 다음과 같은 상황에 더 가깝다고 생각합니다.


djm03178   4년 전

"r과 c는 양분을 얼마를 줘야 하는지 나타내는 배열인 A의 인덱스를 나타내기 위해 쓴 값입니다."

아니요. 그건 입력 설명에서 사용한 변수 r, c이고, 문제 상단에 적혀있는 r, c와는 연관이 없습니다. 문제 상단에서 말한 것은 오직 (r, c)가 어떤 칸을 나타내는 것이고 이때의 r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수라는 것 뿐입니다.

따라서 지문의 다른 부분에서 (x, y)라고 쓰든, (a, b)라고 쓰든, 이것이 어떤 칸을 나타내는 것임은 명확하고 전혀 모호하지 않습니다.

djm03178   4년 전

다시 정리하자면,

  • 지문은 처음에 각 칸을 표현하기 위해 (r, c)와 같은 순서쌍으로 표현할 것을 약속했습니다.
  • 따라서 입력 문단에서 "나무의 위치 (x, y)"라고 표현한 것은 x가 가장 위에서부터 떨어진 칸의 개수이고, y가 가장 왼쪽으로부터 떨어진 칸의 개수인 어떤 칸을 나타내는 데에 부족함이 없습니다.
  • (r, c)라고 처음에 말한 것이 앞으로도 무조건 r와 c라는 변수로 나타내다는 의미는 전혀 내포하지 않습니다. 그러면 본문 중간에 있는 (r+1, c) 등도 정확히 (r, c)랑은 다른데 왜 이건 되고 (x, y)는 안 되나요?

42desix   4년 전

아 그렇네요, 문제의 초두에서 각 칸을 두 정수의 순서쌍으로 나타낸다는 표현으로 시작하는군요. 제 불찰입니다. ㅠㅠ

그렇지만 실제 시험장에서 (r, c)로 표현했다가 (x, y)로 바꿔 표현한 게 아니라면, 표현이 정확했다 하더라도 수정하는 게 어떨까 제안드려봅니다.

질문게시판에도 이 부분 때문에 헷갈려한 분들도 다수 계시고, 저 역시 시험을 준비하는 급박한 상황에서 이 부분 때문에 상당한 시간을 소모했습니다.

물론 알고리즘 실력 연마가 아니라 대회나 코딩테스트의 고득점을 목표로 한다면 문제를 정확히 읽고 이해하는 능력 역시 중요하니 반드시 바꿔야 한다고는 말씀드리지 못하겠습니다.

하지만 실제 기출문제가 어떤 표현을 선택했는지, 그리고 본 사이트가 중점을 두는 부분이 어디인지에 따라 고려해볼 수 있는 논의라고 생각합니다.

baekjoon   4년 전

문제의 본문에는 아무런 문제가 없으며, 실제 기출문제가 어떤 표현을 사용했는지도 이 문제와 아무 상관이 없습니다.

가장 처음 본문에도 쓰셨는데, x가 열, y가 행이라고 당연히 생각하는 것이 저는 이상해 보입니다.

42desix   4년 전

네 백준님, 제가 잘못 이해한 것이 맞고, 지금 상태 그대로도 문제에는 이상이 없습니다. 여기에는 이견의 여지가 없어보입니다.

다만 제가 낭비한 시간이 너무 길었고, 이 부분에서 헷갈려하신 분들이 실제로 많았기 때문에, 이후에 같은 이유로 시간을 허비하실 분들을 위해 배려 차원에서 수정하는 게 어떨까 하여 드리는 제안입니다.

물론 수정할 필요가 전혀 없다고 생각하신다면 그에 대해서 제가 반드시 바꿔야 한다고 주장할 생각은 없습니다.

djm03178   4년 전

(행, 열)이 (x, y)냐, (y, x)냐의 논쟁은 아마도 끊이지 않을 것입니다.  https://www.acmicpc.net/poll/view/7

그래서 백준님도 문제를 만드실 때 가능하면 (r, c)를 사용하려고 하신다고 언급하신 적이 있습니다. 단, 기존에 이미 x와 y를 사용한 것은 고치지 않으신다고 합니다. https://www.acmicpc.net/board/view/30352

게다가 이 문제에서는 입력 문단에서 이미 r, c라는 이름을 사용하는 곳이 있어 오히려 그 쪽과 헷갈릴 여지가 있습니다.

그리고 저는 이런 부분을 수정하지 않음으로써 얻을 수 있는 부분이 많다고 생각합니다. 이 문제는 아무리 틀려도 손해가 없고, 그저 연습을 하기 위한 용도일 뿐입니다. 이 문제에서 오랜 시간 고생을 하심으로써 앞으로는 지문을 더 꼼꼼하게 읽게 되실 것이고, 실제 시험장에서 헷갈리게 만드는 요소가 있어도 실수하지 않으실 가능성이 커졌습니다. 여기에서 이런 경험을 해보지 않으셨다면 정작 중요한 상황에서 난관을 겪게 되지 않으실까요? 좋은 경험을 하셨다고 생각하셨으면 좋겠습니다.

42desix   4년 전

넵 제 오독으로 인한 글에 많은 시간 내주셔서 감사드립니다!

댓글을 작성하려면 로그인해야 합니다.