adfsfsf   6일 전

건덕이가 연습하는 타자법은 QWERTY 자판 배열을 기준으로 Y, G, B와 같거나 왼쪽에 있는 키는 왼손으로, 나머지 키는 오른손으로 누르는 타자 기법이다.

본문에는 위와 같이 적혀 있습니다. 즉, 왼손에 해당하는 자판은 아래와 같습니다.

['q', 'w', 'e', 'r', 't', 'y', 'a', 's', 'd', 'f', 'g', 'z', 'x', 'c', 'v', 'b']

또한 조건에서 '양손의 키를 누른 횟수의 차를 최소로 하도록 문장을 입력'한다고 되어 있었습니다.

shift를 누른 횟수는 sf, space를 누른 횟수는 sp, 왼손 알파벳은 l, 오른손 알파벳은 r이라 하겠습니다.

우선 sf는 'H', 'W'에서 2입니다.

sp는 1입니다.

l은 'e', 'W', 'r', 'd'의 4입니다.

r은 'H', 'l', 'l', 'o', 'o', 'l'의 6입니다.

여기서, 문제에서 없으니 'shift를 누르는 손과 알파벳을 누르는 손이 같아도 된다'라고 가정을 할 때, 그리고 '무조건 반대여야 한다'고 가정을 할 때 모두 관계 없이 정답은 동일하게 됩니다.

'W'가 왼손, 'H'가 오른손 알파벳이기 때문에 만약 서로 교차로 눌러야 한다면 l과 r이 각각 1씩 증가하여 5, 7이 됩니다. 이 경우 sp는 왼손으로 할당하면 6, 7이 되고, 1 차이가 나기 때문에 왼손에 1을 늘려 7, 7이 됩니다.

만약 반대가 가능하다고 해보겠습니다. 공유키가 총 3번 있는 셈이고, 그러면 우선 2 차이를 메우기 위해 l을 2 늘려 6, 6으로 만듭니다. 이제 남은 공유키를 어느 손에 넣든 양손의 차이는 1이 됩니다. 그렇기에 결과적으로 l은 1회 증가합니다. 이는 아래와 같이 출력 조건으로 명시되어 있기 때문입니다.

건덕이는 왼손잡이이기 때문에, 각 손이 눌러야 하는 키 개수의 차가 1일 경우에는 왼손으로 한 번 더 누른다.

즉, 기본적으로는 7, 6입니다. 이때 '최대한 효율적'으로 만들기 위해서는 공유키를 어느 손으로 눌러야 할까요? 당연히 오른손이 될 것입니다. 이 결과는 이전의 'shift를 누르는 손은 항상 알파벳과 반대'라고 가정한 경우와 같은 답이 나옵니다.

즉, 예제 2의 정답은 '7 7'이 됩니다.

adfsfsf   6일 전

@raikoin님, 지우시긴 했지만 제가 그 글을 보고 놓친 것을 깨달아서 적어봅니다.

불필요한 키를 누르지 않으며라고 되어 있기는 했지만 키 개수의 차가 1일 경우에는 왼손으로 한 번 더 누른다고 되어 있어서 '다 누른 후를 기준'이라고 생각한 게 맞습니다. 이는 문제에서 표현을 바꿔줘야 하겠네요.

키 개수의 차가 발생할 경우, 가능하다면 왼손으로 더 많이 누르도록 한다고 써야 될 것 같습니다. 왜냐하면 키 개수의 차가 1이지만 공백이 존재하지 않는 경우가 발생하면 다시 모순이 되기 때문입니다. 말이 되는 문장은 아니지만 조건에는 어긋나는 문장을 같이 적어봤습니다.

raikoin   6일 전

다른 걸 하다 실수로 글을 지워버렸나보네요;

아무튼 조건이 조금 애매하게 적혀있다보니 표현을 조금 더 명확하게 바꾸자는 의견은 저도 동의합니다.

adfsfsf   6일 전

제가 예시로 적은 것과 같은 상황이 하나 있어서 적어봅니다. 'cup'은 왼손 1, 오른손 2가 되니 출력 조건의 '1개 차이가 발생하지만 오른손이 1 더 큰 경우'여서 조건 표현과 모순되네요.

raikoin   6일 전

@adfsfsf 다만 키 개수의 차가 발생할 경우, 가능하다면 왼손으로 더 많이 누르도록 한다라는 문장은 공유키를 전부 왼손으로 누른다라는 의미로 해석될 수도 있기 때문에,

누른 횟수의 차가 최소가 되는 답이 여러 개라면, 왼손으로 누른 횟수가 더 많은 답을 출력한다같은 게 더 적절할 것 같습니다.

이 경우 말씀하신 오른쪽으로 누른 횟수가 1 많은 경우가 유일한 답인 경우에도 문제가 없습니다.

adfsfsf   6일 전

@raikoin 그런 문제는 발생하지 않습니다. 본문에서 이미 따라서 양 쪽에 달려 있는 Shift키와 길이가 긴 스페이스바를 통해 양손의 키를 누른 횟수의 차를 최소로 하도록 문장을 입력하려고 한다.라고 명시하고 있거든요. 그래서 제 제안 방안도 문제는 없습니다.

raikoin   6일 전

제 생각엔 수정안이 그 조건과 정반대의 의미를 갖고 있어서 푸는 사람이 본문 조건을 만족하면서 출력 조건을 만족하는 방향으로 생각하는 게 아니라,

본문 조건과 출력 조건이 완전히 달라 어느 걸 따라야할지 혼란이 올 수도 있다고 봅니다.

'가능한 왼손으로 많이 누른다'라는 문장만 봤을 땐 그냥 왼손으로도 누를 수 있으면 전부 왼손으로 누르라는 의미기 때문에, 이걸 엄격히 지키려면 본문의 조건을 위배해야 한다고 생각합니다

adfsfsf   6일 전

저는 당연히 '본문의 조건'이 대조건, '출력의 조건'은 소조건이어서 '본문의 조건을 만족할 때' '출력의 조건을 만족하도록' 생각하는 게 자연스럽다고 봤는데, 사람에 따라서는 그렇지 않을 수도 있나보네요.

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