본문 바로가기

전체 글

(76)
[백준/C++] 1012번. 유기농 배추 문제 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 1. 첫 번째 풀이 사고 과정 - 알고리즘 수업 초기에 풀었던 종류의 문제. - 입력에 맞춰 밭을 생성 - 모든 칸을 순회, 1인 경우 탐색을 진행 - 0이면 종료, 1이면 해당 칸을 2로 수정하고 반복. - 칸의 크기가 아닌 집합의 개수를 세야 하므로, 탐색이 끝난 후 전체 count를 1 증가시키는 식으로 작성 1. 각 입력에 따른 반복문 설정 2. 재귀 함수를 사용, 인접한 모든 1을 2로 칠하는 함수 작성 3. 모든 칸을 순회, 해당 칸이 1이라면 count를 ..
[백준/C++] 1065번. 한수 문제 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 1. 첫 번째 풀이 (마지막 풀이) 사고 과정 - 1부터 N까지 반복 - 자리수를 분리, 배열 등으로 저장 - 배열의 처음부터 끝까지 반복. [1]에서 [2]를 빼고 d에 저장해둔다. [2]에서 [3]을 뺀 수가 d와 다르다면 break, 끝까지 같다면 count를 1 증가 1. 1부터 N까지 반복 2. 자리수를 분리, 배열로 저장 3. 배열의 두 원소를 빼고, 공차를 캐싱 4. 연속해서 빼되, 공차와 다른 순간 종료 5. 끝까지 통과한 수의 개수를 세서 출력..
[백준/C++] 1032번. 명령 프롬프트 문제 1032번: 명령 프롬프트 첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 www.acmicpc.net 1. 첫 번째 풀이(마지막 풀이) 사고 과정 - 문제와 예제를 전부 읽어보았는데, *를 사용하는 경우는 아예 제외된 듯하다. 검색 결과만 나와있고 전체 파일은 없으니. - 핵심은 같은 글자는 그대로, 다른 글자는 ?로 처리하는 것. - 첫 파일을 배열에 넣어두고, 다른 파일들을 for문으로 하나씩 비교하며 다른 경우에만 바꾸면 될 것 같다. 심지어 파일 제목 길이까지 모두 같다. 1. N을 입력받음 2. 첫 파일을 배열에 입력받음(답안이 될 예정) 3..
[백준/C++] 1002번. 터렛 문제 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$ 출력한다. www.acmicpc.net 1. 첫 번째 풀이 사고 과정 - 간단하게 조규현은 A, 백승환은 B, 마린은 마린으로 칭해보자. - A로부터 반지름이 r1인 원을, B로부터 반지름이 r2인 원을 그릴 수 있다. - 두 원은 두 점에서 만나거나, 한 점에서 만나거나, 만나지 않거나, 완전히 겹칠 수 있다. - 완전히 겹치는 경우는 A와 B의 x, y, r이 모두 같아야 성립된다. 이땐 -1을 출력한다. - x1과 x2, y1과 y2가 같지만, r1과 r2가 다르다면 0을 출력한다. - 한 점에서 만나는 경우는, r1 + r2가 A, B 사..
[백준/C++] 1026번. 보물 문제 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 1. 첫 번째 풀이(마지막 풀이) 사고 과정 - 같은 위치끼리 곱하고 모두 더한다. - A의 가장 큰 수를 B의 가장 작은 수에, 두 번째로 큰 수는 두 번째로 작은 수 위치에 배치하면 될 것 같다. - 그렇다면 다음 문제는 어떻게 위치시키느냐. - 제일 먼저 떠오르는 방법은 (B의 값, 인덱스)를 하나로 묶고 값 크기순으로 정렬하는 것. B의 값이 같을 때 인덱스 순서가 유지될 필요는 없다. - 재배열한 A를 출력하는 게 아닌, S의 최솟값을 출력..
[알고리즘] 확장 유클리드 알고리즘 구현하기 이번 글에선 유클리드 알고리즘의 진화판, 확장 유클리드 알고리즘(Extended Euclidean Algorithm)에 대해 이해하고, 구현해보자. 유클리드 알고리즘은 두 수 a, b의 최대공약수를 구하는 알고리즘이었다. 유클리드 알고리즘을 모른다면 아래 글을 참고하자. [알고리즘] 유클리드 알고리즘 구현하기 유클리드 알고리즘(Euclidean Algorithm)은 유클리드 호제법으로도 불리며, 두 수 a, b의 최대공약수 gcd를 구하는 방법이다. 유클리드 알고리즘의 기본 동작 원리는 간단히 다음과 같이 쓸 수 있다. 두 autumncat.tistory.com 확장 유클리드 알고리즘이란? 확장 유클리드 알고리즘은 sa + tb = gcd(a, b)를 만족하는 s, t를 구하는 알고리즘이다. 증명은 생략..
[알고리즘] 유클리드 알고리즘 구현하기 유클리드 알고리즘(Euclidean Algorithm)은 유클리드 호제법으로도 불리며, 두 수 a, b의 최대공약수 gcd를 구하는 방법이다. 유클리드 알고리즘의 기본 동작 원리는 간단히 다음과 같이 쓸 수 있다. 두 수 a, b가 있을 때, a를 b로 나눈 나머지를 r이라고 하면 1. a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이를 gcd(a, b) = gcd(b, r)과 같이 나타낼 수 있다. 2. gcd(a, 0) = a이다. 만약 두 수를 15와 9라고 두자. 그럼 다음과 같이 전개할 수 있다. gcd(15, 9) = gcd(9, 6) = gcd(6, 3) = gcd(3, 0) = 3 15와 9의 최대공약수인 3을 구할 수 있다. 그렇다면 이번에는 위 알고리즘을 코드로 구현해보자. 여기..
[Unity] 함수 내 충돌 처리(isTouching , OverlapBox) 서론 유니티에서 충돌 처리를 위해 OnTriggerEnter, OnCollisionEnter등을 쓰는 경우는 매우 많다. 하지만 이 함수들의 단점은, 충돌이 일어났을 때 함수를 실행한다는 점이다. 즉, 기존에 쓰던 함수 내에서 따로 충돌 처리를 할 수 없다는 점이다. 나 같은 경우엔, 다음과 같은 일이 있었다. 더보기 플레이어와 닿을 시 점수 오브젝트를 랜덤한 위치로 옮긴다. 옮겨진 위치에 똑같은 점수 오브젝트가 있을 경우, 다시 위치를 옮긴다. 그렇게 점수 오브젝트끼리 겹치는 일을 없앤다. 지금까진 OnTriggerEnter를 사용해 해당 일을 처리했는데, 새로 생성된 오브젝트 뿐만이 아닌, 기존에 그 자리에 있던 오브젝트도 위치가 변한다는 단점이 있었다. 이는 점수를 먹으려던 플레이어에게 부정적인 경..