본문 바로가기

전체 글78

[BOJ 14891] 톱니바퀴 https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴가 1번, 그 오른쪽은 2번, 그 오른쪽은 3번, 가장 오른쪽 톱니바퀴는 4번이다. 이때, 톱니바퀴를 총 K번 회전시키려고 한다. 톱니바퀴의 회전은 한 칸을 기준으로 한다. 회전은 시계 방향과 반시계 방향이 있고, 아래 그림과 같이 회전한다. 톱니바퀴를 회전시키려 www.acmicpc.net 위 문제는 N번 톱니바퀴를 회전한 후, 각 톱니바퀴의 12시 방향의 극에 따라 점수를 계산하는 문제이다. 주어지는 입력은 톱니바퀴의 .. 2020. 3. 25.
[C/C++] 10진법 -> N진법 변환 Theory X진법 수를 X로 나누면 한 자리씩 소수점으로 이동하게 된다. 아래 예제를 보면 알 수 있다. 10진법 123 / 10 = 12.3 12.3 / 10 = 1.23 2진법 1011 / 2 = 101.1 또한 어떤 수를 10진법으로 표기를 하든, 2진법으로 표기를 하든, 16진법으로 표기를 하든 결국 다 표현하는 방식만 다를 뿐, 같은 값을 가진다. 10진법 11이라는 숫자를 2의 배수의 합으로 표현을 해보자. $$ 11 = 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 1 \cdot 2^0$$ 위와 같이 표현이 되는데, 이 때 11이라는 10진법 수를 2로 나눈 나머지는 구하면 $2^n$ 부분이 각 1씩 떨어지고 가장 작은 부분인 $ 2^0 $부분의 계수가 나오게 .. 2020. 1. 30.
[Unity] UI 클릭 시, 다른 클릭 이벤트 막기 UI에 있는 오브젝트를 클릭했을 때 다른 클릭 이벤트가 발생하지 않도록 해야할 때가 있습니다. 예를 들어, 스타크래프트에서 UI를 클릭했는데 유닛이 움직이거나 공격한다면 곤란할 것입니다. Unity에서는 Raycast를 통해 클릭이벤트를 처리합니다. 그럼 UI에서도 Raycast가 가능하게 설정한 후에 UI가 클릭되었을 때는 다른 클릭이 처리되지 않게하면 됩니다. IsPointerOverGameObject() 라는 함수는 UI가 클릭되면 true를 아니면 false를 반환합니다. 이를 이용하여 다른 부분들을 처리하면 됩니다. using UnityEngine.EventSystems; if(Input.GetMouseButtonDown(0)) { if(!EventSystem.current.IsPointerOv.. 2020. 1. 30.
[정렬] 선택 정렬 (Selection Sort) 원소를 넣을 위치를 정해놓고 어떤 원소를 넣을지 찾아서 정렬한다. 오름차순의 경우, 가장 작은 값을 찾아서 왼쪽부터 정렬을 하거나, 가장 큰 값을 찾아 오른쪽부터 정렬을 하는 방식이다. 1. i = ( 1 ~ (n - 1) )인덱스까지 탐색 2. j = ( (i + 1) ~ n ) 인덱스까지 탐색 3. j의 값 중에 가장 작은 값을 찾아 i번째의 값과 위치를 바꾼다. 4. 위 과정 반복 코드 구현 #include void PrintArray(int* arr, int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } void Selection(int* arr, int size) { int min, tmp; fo.. 2020. 1. 20.
[정렬] 삽입 정렬 (Insertion Sort) 두 번째 자료부터 시작하여 앞에 자료들과 비교하여 알맞은 위치에 자료를 넣는 형식의 정렬이다. 비교를 하는 앞의 배열은 이미 정렬이 되어있다. 즉, n번째 자료를 비교할 때 0 ~ (n - 1) 번째 자료는 정렬이 되어있다. 손에 카드를 들고 정렬하는 방식과 유사하다. 1. i = (1 ~ n)인덱스까지 탐색 2. j = ( (i - 1) ~ 0 ) 인덱스까지 탐색 3. j번째 값이 i번째 값보다 크면 j + 1의 값에 j의 값을 할당하고, 크지 않으면 해당 위치에 i번째 값을 삽입 4. 위 과정 반복 코드 구현 #include void PrintArray(int* arr, int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } pri.. 2020. 1. 20.