가위바위보 풀이

··설명 약 4분·작성: 해비·블로그 소개

읽기 전에 알아두면 좋아요

아래 개념이 익숙하면 본문을 바로 읽으세요. 낯선 개념만 링크에서 복습하면 됩니다.

개념과 예제는 실행하지 않아도 읽을 수 있습니다. 내 컴퓨터·터미널에서 직접 실행하는 과정은 선택 실습입니다.

과정 위치와 선택 복습 안내

과정 위치: 준비와 기초 구현 · 문제

과정 위치는 이 글이 속한 묶음입니다. 이 단계의 모든 개념을 먼저 읽을 필요는 없습니다. 위에 연결한 개념 중 낯선 내용만 복습하세요. 문제의 조건·상태·갱신 순서는 익숙한 언어로 설명하면 됩니다.

JavaScript로 문법·실행 복습하기 (선택)

개념 글의 코드는 JavaScript 예시입니다. 문제 화면에서는 JavaScript·Python·Java·C++·C# 중 익숙한 언어의 함수를 작성하세요. 본문의 Node.js 입출력 예시는 로컬 실행을 위한 별도 안내입니다.

가위바위보 문제는 두 사람의 선택을 입력받아 매 판의 어떤 결과를 구하나요?

두 사람의 가위바위보 선택을 입력받아 매 판의 승부 결과를 구하는 문제입니다. 배열·조건문·승리 규칙의 기본을 준비하고, 아래 입력·반환 계약을 확인해 직접 풀어보세요.

적용 조건·범위: 이번 대조는 원자료의 문제 조건과 예제 확인입니다. 이 글의 전체 코드를 새로 실행하거나 공식 채점에 제출한 결과를 뜻하지 않습니다. 아래 예제·자가 확인 항목은 직접 실행해 기대 출력과 비교하는 기준입니다.

공식 문서 참고: 관련 개념: MDN 논리합으로 승리 조건 묶기

문제

A와 B가 총 N번 가위바위보를 합니다. 선택은 가위 1, 바위 2, 보 3으로 주어지며, 각 회차에서 A가 이기면 A, B가 이기면 B, 비기면 D를 한 줄에 하나씩 출력해야 합니다. N은 1 이상 100 이하의 자연수이고, 두 사람의 선택은 각각 N개씩 입력됩니다.

예제에서는 A의 선택이 2 3 3 1 3, B의 선택이 1 1 2 2 3입니다. 같은 위치를 차례대로 비교하면 결과는 A, B, A, B, D가 됩니다.

회차 A B 결과
1 2 1 A
2 3 1 B
3 3 2 A
4 1 2 B
5 3 3 D

직접 풀어보기

먼저 선택한 언어의 입력·반환 계약에 맞춰 작성해 보세요. 힌트 받기와 정답과 비교하기는 코드를 실행하지 않는 AI 분석입니다. 해답·해설은 아래에서 필요할 때 펼칠 수 있습니다.

0 / 6,000바이트

입력 예시 전체를 문자열로 전달하고 출력 문자열을 반환합니다. solve(input)를 호출합니다. 표준 입력·출력 코드는 추가하지 않습니다. 입력 공백과 LF/CRLF 줄바꿈을 처리합니다. Tab은 다음 항목으로 이동합니다. 입력 영역 오른쪽 아래를 끌어 높이를 조절할 수 있습니다.

비밀키·개인정보는 입력하지 마세요. 코드는 이 페이지에만 유지됩니다.

해답·해설 보기
JavaScript 해답
function solve(input) {
    const t = input.trim().split(/\s+/).map(Number);
    const n = t[0], a = t.slice(1, n + 1);
    return a.map((x, i) => {
        const y = t[n + 1 + i];
        return x === y ? 'D' :((x === 1 && y === 3) ||(x === 2 && y === 1) ||(x === 3 && y === 2)) ? 'A' : 'B';
    }).join('\n');
}

입력 예시 전체를 문자열로 전달하고 출력 문자열을 반환합니다. solve(input)를 호출합니다. 표준 입력·출력 코드는 추가하지 않습니다. 입력 공백과 LF/CRLF 줄바꿈을 처리합니다.

원자료와 확인 범위

2026-10-12에 제공된 학습 자료 섹션 2. 1, 2차원 탐색.pdf의 3쪽 ‘가위 바위 보’와 문제 조건·예제를 대조했습니다. 같은 ZIP의 해당 문제 TXT는 풀이 코드 자료입니다. 이 자료의 최초 출제 원문·저자·공개 배포 주소까지 확인한 것은 아닙니다.

이번 대조는 원자료의 문제 조건과 예제 확인입니다. 이 글의 전체 코드를 새로 실행하거나 공식 채점에 제출한 결과를 뜻하지 않습니다. 아래 예제·자가 확인 항목은 직접 실행해 기대 출력과 비교하는 기준입니다.

풀이와 정답 보기 (클릭)

각 회차는 다른 회차의 결과에 영향을 주지 않으므로 처음부터 끝까지 한 번 순회하면 됩니다. 먼저 같은 값인지 확인해 비긴 경우를 처리하고, 그다음 A가 이기는 세 조합만 명시합니다. 나머지 서로 다른 조합은 모두 B의 승리입니다.

알고리즘 설계

가위·바위·보가 서로 이기는 순환 규칙을 나타낸 그림

A가 이기는 경우는 가위와 보, 바위와 가위, 보와 바위의 세 쌍입니다. 숫자로 바꾸면 (1, 3), (2, 1), (3, 2)입니다. 이 세 조건을 논리합으로 묶으면 승리 규칙을 빠뜨리지 않고 표현할 수 있습니다.

판정 순서도 중요합니다. 두 값이 같으면 바로 D를 저장합니다. 값이 다를 때만 A의 승리 조합을 확인하고, 여기에 해당하지 않으면 B를 저장합니다. 결과를 배열에 모았다가 줄바꿈 문자로 연결하면 문제의 출력 형식과 정확히 맞습니다.

두 배열의 같은 인덱스와 if/else 조건을 읽고, Node.js가 설치된 별도 연습 폴더에서 실행합니다. 전체 코드는 solution.cjs로 저장하고 input.txt에는 게임 수 5, A의 선택 2 3 3 1 3, B의 선택 1 1 2 2 3을 이 순서의 세 줄로 적습니다. PowerShell 7은 Get-Content -Raw -Encoding UTF8 ./input.txt | node ./solution.cjs, Bash·명령 프롬프트는 node solution.cjs < input.txt를 사용합니다. 기대값 A, B, A, B, D가 한 줄에 하나씩 나오는지 비교하세요. 이 안내의 실행 결과는 미확인입니다.

A와 B의 선택을 회차별로 비교해 승자를 출력하는 과정
const fs = require("fs");

const inputText = fs.readFileSync(0, "utf8");
const input = inputText
  .trim()
  .replaceAll(String.fromCharCode(13), " ")
  .replaceAll(String.fromCharCode(10), " ")
  .split(" ")
  .filter(Boolean)
  .map(Number);
const count = input[0];
const playerA = input.slice(1, count + 1);
const playerB = input.slice(count + 1, count * 2 + 1);
const winners = [];

for (let index = 0; index < count; index += 1) {
  const choiceA = playerA[index];
  const choiceB = playerB[index];

  if (choiceA === choiceB) {
    winners.push("D");
  } else if (
    (choiceA === 1 && choiceB === 3) ||
    (choiceA === 2 && choiceB === 1) ||
    (choiceA === 3 && choiceB === 2)
  ) {
    winners.push("A");
  } else {
    winners.push("B");
  }
}

console.log(winners.join(String.fromCharCode(10)));

입력 문자열의 CR과 LF를 공백으로 바꾼 뒤 빈 값을 제거하므로 LF와 CRLF 입력을 모두 처리합니다. 첫 값은 게임 횟수이고, 이어지는 N개와 그다음 N개를 각각 A와 B의 배열로 나눕니다. 마지막에는 줄바꿈 문자 코드로 결과를 연결해 한 줄에 하나씩 출력합니다.

복잡도와 검증

N개의 회차를 한 번만 비교하므로 시간 복잡도는 O(N)입니다. 입력 배열과 결과 배열을 저장하는 공간은 O(N)이며, 각 회차를 판정하는 추가 공간은 O(1)입니다.

검증 항목 입력 특징 기대 결과
제공 예제 승·패·무가 모두 포함됨 A, B, A, B, D
최소 횟수 N=1, 같은 선택 D
A 전승 세 가지 승리 조합 A를 세 줄 출력
B 전승 A 승리 조합의 반대 B를 세 줄 출력

배열을 한 번 순회하며 조건으로 결과를 결정하는 다른 기초 문제는 보이는 학생 JavaScript 풀이에서도 확인할 수 있습니다.

이 문제를 푼 뒤 확인하기

비긴 라운드와 세 가지 승리 조합을 표로 적고 각 라운드의 출력 줄을 확인해 보세요.

본문의 예제와 이 반례를 직접 실행해 예상 출력과 비교하고, 결과가 다르면 입력 조건과 반복 범위를 다시 확인하세요.

글 소개·학습 준비·전체 목차

두 사람이 같은 횟수만큼 가위바위보를 했을 때, 매 회차의 선택을 짝지어 승자를 판정하는 문제입니다. 한쪽의 결과만 따로 계산하지 않고 같은 인덱스의 두 값을 함께 비교하는 것이 핵심입니다.

이 글이 도움이 되었나요?

조회 중

이어서 공부하기

체크포인트: 해설을 가리고 다시 풀고, 경계 입력을 하나 바꾸어 예상 결과와 실제 결과를 비교하세요. 직전 값과 지금까지의 최댓값을 구분하고, 초기값과 갱신 순서를 손으로 추적하세요.

다음 추천 · 문제: 점수계산 풀이

같은 주제의 문제에 적용하며 방금 배운 개념을 확인합니다.

권장 순서는 학습 가이드와 같습니다. 다른 순서는 접힌 참고 목록에서 확인할 수 있습니다. 읽음 표시는 숙달이나 채점 결과가 아닙니다.

원래 과정 목록 순서 (선택)

읽음 기록

읽음 — / 전체 58개 · 필수 58개

이 글을 쓴 해비

웹사이트를 제작·운영하고, 개인 서비스와 자동화·AI 도구를 만듭니다. 직접 만들며 배운 내용과 문제 해결 과정을 BlogFlow에 기록합니다.

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기