문제 설명집과 사무실을 통근하는 n명의 사람들이 있다. 각 사람의 집과 사무실은 수평선 상에 있는 서로 다른 점에 위치하고 있다. 임의의 두 사람 A, B에 대하여, A의 집 혹은 사무실의 위치가 B의 집 혹은 사무실의 위치와 같을 수 있다. 통근을 하는 사람들의 편의를 위하여 일직선 상의 어떤 두 점을 잇는 철로를 건설하여, 기차를 운행하려고 한다. 제한된 예산 때문에, 철로의 길이는 d로 정해져 있다. 집과 사무실의 위치 모두 철로 선분에 포함되는 사람들의 수가 최대가 되도록, 철로 선분을 정하고자 한다.양의 정수 d와 n 개의 정수쌍, (hi, oi), 1 ≤ i ≤ n,이 주어져 있다. 여기서 hi와 oi는 사람 i의 집과 사무실의 위치이다. 길이 d의 모든 선분 L에 대하여, 집과 사무실의 위치..
전체 글
앉기 및 슬라이딩이제 파쿠르 동작을 구현해 보자.첫 번째로 슬라이딩을 구현하려 하는데 이는 앉기 키와 동일하게 사용할 예정이라 앉기를 먼저 구현하고 달리면서 앉기 키를 눌렀을 때 슬라이딩이 되도록 구현할 것이다. 앉기Control키를 눌러 캐릭터가 앉을 수 있도록 만들어 보자.우선 입력부터 처리하자.누르고 있을 때만 상태를 변경해야 하기 때문에 PassThrough로 설정하였다.public void OnCrouch(InputValue value){ crouch = value.isPressed;} crouch가 참일 때 상태를 변경해 보자. if (blackBoard.parkourInputController.crouch && _currentParkourState != ParkourState.C..
문제 설명지민이는 각 칸마다 (1×1크기의 정사각형) 램프가 들어있는 직사각형 모양의 탁자를 샀다. 모든 램프는 켜져있거나 꺼져있다. 각 열의 아래에는 스위치가 하나씩 달려있는데, 이 스위치를 누를 때마다 그 열에 있는 램프의 상태가 바뀐다. 켜져있는 램프는 꺼지고, 꺼져있는 램프는 켜진다)만약 어떤 행에 있는 램프가 모두 켜져있을 때, 그 행이 켜져있다고 말한다. 지민이는 스위치를 K번 누를 것이다. 서로다른 스위치 K개를 누르지 않아도 된다. 지민이는 스위치를 K번 눌러서 켜져있는 행을 최대로 하려고 한다.지민이의 탁자에 있는 램프의 상태와 K가 주어졌을 때, 스위치를 K번 누른 후에 켜져있는 행의 최댓값을 구하는 프로그램을 작성하시오.https://www.acmicpc.net/problem/1034..
문제 설명어떤 수식이 주어졌을 때, 괄호를 제거해서 나올 수 있는 서로 다른 식의 개수를 계산하는 프로그램을 작성하시오.이 수식은 괄호가 올바르게 쳐져 있다. 예를 들면, 1+2, (3+4), (3+4*(5+6))와 같은 식은 괄호가 서로 쌍이 맞으므로 올바른 식이다.하지만, 1+(2*3, ((2+3)*4 와 같은 식은 쌍이 맞지 않는 괄호가 있으므로 올바른 식이 아니다.괄호를 제거할 때는, 항상 쌍이 되는 괄호끼리 제거해야 한다.예를들어 (2+(2*2)+2)에서 괄호를 제거하면, (2+2*2+2), 2+(2*2)+2, 2+2*2+2를 만들 수 있다. 하지만, (2+2*2)+2와 2+(2*2+2)는 만들 수 없다. 그 이유는 쌍이 되지 않는 괄호를 제거했기 때문이다.어떤 식을 여러 쌍의 괄호가 감쌀 수 ..
동적 콜라이더 캡슐애니메이션이 진행되며 캐릭터의 범위가 변경되는데 collider는 변경되지 않아 예상하지 못하는 충돌이 일어나기도 한다.이를 개선하기 위해 애니메이션에 맞춰 collider가 변경되는 시스템을 만들어 보자. 애니메이션 실행 중 바운드 계산Collider가 적용되려면 애니메이션이 적용될 때 캐릭터의 바운드를 계산할 수 있어야 한다.먼저 이를 시도해 보자.가장 먼저 생각나는 방법은 skeleton을 갖고 있는 오브젝트의 바운드를 받아오면 되지 않을까 싶다.skeleton 구조는 오브젝트의 계층 구조로 이루어져 있기 때문에 최상위 오브젝트에서 재귀적으로 자식들을 모두 트래킹 하여 저장한 뒤 포지션상 가장 낮은 값과 높은 값을 통해 Bound를 만들어주면 될 것 같다. 우선, 모든 bo..
문제 설명철수와 민수는 카드 게임을 즐겨한다. 이 카드 게임의 규칙은 다음과 같다.N개의 빨간색 카드가 있다. 각각의 카드는 순서대로 1부터 N까지 번호가 매겨져 있다. 이 중에서 M개의 카드를 고른다.N개의 파란색 카드가 있다. 각각의 카드는 순서대로 1부터 N까지 번호가 매겨져 있다. 이 중에서 빨간색에서 고른 번호와 같은 파란색 카드 M개를 고른다.철수는 빨간색 카드를 가지고 민수는 파란색 카드를 가진다.철수와 민수는 고른 카드 중에 1장을 뒤집어진 상태로 낸다. 그리고 카드를 다시 뒤집어서 번호가 큰 사람이 이긴다. 이 동작을 K번 해서 더 많이 이긴 사람이 최종적으로 승리한다. 한 번 낸 카드는 반드시 버려야 한다.철수는 뛰어난 마술사이기 때문에 본인이 낼 카드를 마음대로 조작할 수 있다. 즉,..
경사 체크 오류 수정현재 경사 체크는 3점 탐지(제자리, 오른쪽, 앞쪽)로 기울기를 구하고 있다.얇은 바닥이나 경사로의 끝쪽에 위치했을 경우 오른쪽 부분이 높이가 낮게 hit가 되어 제자리의 y좌표와 동일하게 설정하여 해결했었다.하지만 특수한 경우에 지형의 모서리를 hit하거나 하면 잘못된 경사가 계산되기도 한다.이런 경우는 조작감이 매우 떨어지는 경우이다.따라서 이렇게 오탐지하는 경우에는 예외 처리가 필요하다. 정확한 경사 체크우선 생각나는 방법으로는 전방에 찍힌 hit의 높이가 stepOffset을 넘으면 움직일 수 없게 만드는 방법이 있을 것 같다.이는 높은 계단도 처리할 수 있을 것 같다.public float stepOffset;if (_playerBlackBoard.footTracker..