BOJ[1592] - 영식이와 친구들 by JavaScript
영식이와 친구들
문제
언어
- JavaScript
순서도
- 각 사람마다 공을 몇 번 던졌는지 세는 변수 배열 생성
- 사람들 중에서 공을 M 번 받은 사람이 생길 때까지
- 현재 공을 받은 횟수가 홀수 번이면 현재 위치에서 시계 방향으로 L 번째 있는 사람에게 공 던지기
- 핸재 공을 받은 횟수가 짝수 번이면 현재 위치에서 반시계 방향으로 L 번째 있는 사람에게 공 던지기
- 최종적으로 공을 총 몇 번 던지는지 출력
문제 풀이 step 1
- 시물레이션 형식의 문제로 순서도에 작성한 대로 로직을 작성하면 됩니다.
- 추가 설명은 주석으로 작성하겠습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
const [n, m, l] = input[0].split(" ").map(Number);
// 1 ~ N 까지 사람들 공 던진 횟수를 기록할 배열 생성
const arr = Array(n + 1).fill(0);
// 1 번 사람이 맨 처음에 공을 받고 던짐
arr[1] = 1;
let ans = 0;
let index = 1;
while (true) {
// 사람들 중에서 공을 m 번 던진 사람이 있다면 종료
if (arr[index] === m) break;
// 짝수번 던졌으면 반시계 방향으로 L 번째 있는 사람에게 공 던지기
if (arr[index] % 2 === 0) index -= l;
// 홀수번 던졌으면 시계 방향으로 L 번째 있는 사람에게 공 던지기
else index += l;
// 1 ~ N 범위 안에 들어가도록 다시 수정
if (index < 1) index += n;
if (index > n) index -= n;
// 공 던진 횟수 증가
arr[index] += 1;
// 총 횟수 갱신
ans += 1;
}
return ans;
};
console.log(solution(input));