본문 바로가기

분류 전체보기

(56)
[유니티] 일정한 속도로 회전하는 오브젝트 만들기 [SerializeField] float rotateSpeed;//1초당 회전할 속도 float t; void Update() { t += Time.deltaTime; transform.rotation = Quaternion.Euler(0, 0, t*rotateSpeed); if (t * rotateSpeed >= 360) t = 0; //t값이 너무 커지지 않게 조절 } 오브젝트를 1초에 rotateSpeed의 각도만큼 회전하게 하는 스크립트이다.
[유니티] 일정 시간 후에 자동으로 사라지는 오브젝트 만들기 [SerializeField] float t; void Start() { Invoke("Des", t); //t초 뒤에 des라는 함수를 실행시켜라. } void Des() { Destroy(gameObject); } 위와 같은 스크립트를 작성 한 후 넣어주고, Inspector에서 t의 값을 정해주면 t초뒤에 자동으로 삭제되는 오브젝트를 만들 수 있다.
[백준] 2482번 색 상환 [C++] https://www.acmicpc.net/problem/2482 2482번: 색상환 첫째 줄에 N색상환에서 어떤 인접한 두 색도 동시에 선택하지 않고 K개의 색을 고를 수 있는 경우의 수를 1,000,000,003 (10억 3) 으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 접근 방식 DP라는 이중 배열을 만들건데, DP[N][M]의 형태로 만든다. 여기서 N은 색상환의 갯수, M은 선택할 색상의 갯수이다. 처음에 두개의 예외처리를 해줘야 하는데, N개의 색 상환에서 1개의 색을 고른다고 가정해보자면, 경우의 수는 N개가 나온다. 따라서 M이 1일 때 DP[N][1] = N이라는 공식을 만족하게 된다. 문제에서 언급한 예시인데, 색상환의 갯수가 선택할 색의 2배보다 작을 경우, 선택할..
[유니티] 코루틴(Coroutine)에 대해 알아보자 코루틴이란? 코루틴은 유니티로 프로그래밍을 할 때 많이 사용되는 문법으로, 시간의 경과에 따른 명령을 주고싶을 때 사용하게 되는 문법입니다. Update문으로 프레임마다 적용하여 시간을 계산하는 방법이 있지만 코루틴을 사용하면 훨씬 간단해집니다. 예를 들어서 1초마다 카운터를 출력하는 로그를 Update함수를 통해 구현한다고 친다면, float t; int counter; void Update() { t+= Time.deltaTime; if (t >= 1) { Debug.Log(counter); counter++; t = 0; } } 이런 식으로 구현이 됩니다. 하지만 업데이트 함수는 매 프레임마다 업데이트 함수를 가지고 있는 오브젝트마다 실행을 하기 때문에, 비용이 많이 들게 됩니다. 이런 상황에서 코..
[백준] 4195번 친구 네트워크 [C++] https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net 접근 방법 각각의 문자가 들어올 때 map의 기능을 활용하여 , 이미 등록이 되어있는지 확인을 해준다. 이미 들어왔던 문자열이면 그 문자열의 value를 반환해주고, 새로 들어오는 문자열이면 새로운 value를 부여한 후 반환해준다. 이렇게 반환된 value들을 union find를 하여 연결을 시켜주면, 해결이 가능하다. union find의 과정에서 각각의 자식들의 갯수도 합쳐주는 ..
[백준] 1948번 임계경로 [C++] https://www.acmicpc.net/problem/1948 1948번: 임계경로 첫째 줄에 도시의 개수 n(1 ≤ n ≤ 10,000)이 주어지고 둘째 줄에는 도로의 개수 m(1 ≤ m ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 도로의 정보가 주어진다. 처음에는 도로의 www.acmicpc.net 문제 접근 방식 두가지 방법으로 풀어보았다. 시작점과 끝점에서 BFS 위상정렬 1. 시작점에서 BFS를 하여 목적지까지의 최대 거리와 각각의 지점까지 최대 거리를 구한다. 그 후 끝 점에서부터 다시 BFS를 하며, 현재까지의 거리 - 지나갈 간선 = 지나갈 곳의 거리 > n >> m; for (int i = 0; i ..
[백준] 1766번 문제집 [C++] https://www.acmicpc.net/problem/1766 1766번: 문제집 첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주 www.acmicpc.net 접근 방식 위상정렬과 우선순위 큐를 이용하여 문제를 풀었다. 우선순위 큐를 쓰는 이유는 3번조건인 난이도가 쉬운 문제부터 풀어야 하기 때문에, 푸는게 가능한 문제중에서 가장 숫자가 작은 숫자부터 풀기 위해서이다. 먼저, X번의 문제를 풀기위해서 선행적으로 풀어야 하는 문제들이 i개 있다고 생각하자. 그렇다면 이 i의 값이 0이 되는 문제는 선행으로 아무것도 풀지 않아..
[유니티] 진행이 불가능 할 때 방향을 스스로 바꾸는 오브젝트 만들기 먼저 한 방향으로 움직이는 오브젝트를 만들어준다. Vector3 MoveV; int vec; //이동 방향을 저장한 변수 int speed; private void Awake() { speed = 1; vec = 1; } void Update() { MoveV = new Vector3(vec, 0, 0); transform.position += MoveV * Time.deltaTime * speed; Vector2 front = new Vector2(transform.position.x + vec*0.5f, transform.position.y); } 여기서 토끼의 진행방향에 Laycast를 생성해준 후, 그 Laycast가 border태그를 가진 오브젝트를 만나면 진행방향을 바꿔준다. DrawLay기능..