본문 바로가기

분류 전체보기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.
[BOJ 2193] 이친수 https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않는다. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다. 예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되 www.acmicpc.net 이 문제는 의외로 단순하게 풀 수 있다. 길이가 N인 이친수의 개수를 구하는 것은 길이가 N - 1인 이친수에서 0으로 끝나는 이친수와 1.. 2020. 1. 13.
[BOJ 1932] 정수 삼각형 https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다. 삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 www.acmicpc.net 문제에서는 삼각형이 예각 삼각형처럼 보이지만, 입력을 보면 직각삼각형 형태이다. 이를 통해서 보면 i번째 줄에는 (i + 1)개의 입력.. 2020. 1. 13.
[BOJ 2884] 알람 시계 https://www.acmicpc.net/problem/2884 2884번: 알람 시계 문제 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다. 이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다. 바로 "45분 일찍 알람 맞추기"이다. 이 방법은 단순하다. 원래 맞춰져있는 알람을 45분 앞서는 시간으로 바꾸는 것이다. 어차피 www.acmicpc.net 입력된 시간에 45분을 뺀 시간을 출력하는 문제이다. 분에서 45분을 빼고 분이 0보다 작을 경우 시간에서 1시간을 빼고 분에 60분을.. 2020. 1. 3.
[BOJ 1924] 2007년 https://www.acmicpc.net/problem/1924 1924번: 2007년 첫째 줄에 빈 칸을 사이에 두고 x(1≤x≤12)와 y(1≤y≤31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다. www.acmicpc.net 입력받은 날짜까지의 일 수를 모두 더한 후 7로 나눈 나머지를 이용하여 요일을 출력하면 된다. #include int main() { int day[] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; int m, d; scanf("%d %d", &m, &d); for (int i = 1; i < m; i++) d += day[i - 1]; s.. 2020. 1. 3.