반응형 분류 전체보기510 백준 C# - 14002 +) 풀이 문제를 읽어보면입력이 1000이니까 1000*1000 = 1000000(백만)이므로 O(N²) 알고리즘으로도 이 문제는 충분히 통과 가능하다. 알고리즘01 문제 분석가장 긴 증가하는 부분수열 거의 동일하지만 한 가지 추가된 조건이 있다.단순히 수열의 길이만 구하는 것이 아니라 그 실제 수열의 내용도 출력해야한다. 02 경로 복원(Path Reconstruction)그 값을 만들기 위해 어떤 선택을 했는지를 저장해서 실제해를 구성할 수 있게 하는 방법이다. 경로 복원에 대한 정보 저장 - prev 배열prev[i] = dp[i]를 만들기 위해 선택된 이전 인덱스, 즉 dp[i]가 dp[j]+1로 갱신되었으면 prev[i] = j를 저장하는 것이다.10 20 10 30 20 50ilist[i] dp[i]pr.. 2025. 4. 11. Unity - 점과 직선사이의 거리를 구해보자(벡터 투영 공식 활용) 경로에 따라 움직일때 특정 구간에서만 이벤트를 발생시키고 싶은 상황이 생겨서 점과 직선사이의 거리를 구해야하는 상황이 발생했다. 처음에는 Raycast가 생각이 났다.근데 매번 물리충돌을 검사하는거라 간단히 지나가기만하면 되는건데 굳이 설정을 많은 기능말고 다른 기능을 사용하고 싶었다.우리가 계산하고 싶은건 : 점 P가 선분AB에 얼마나 가까운가?이다.이를 위해 점P에서 선분AB에 수직으로 선을 내렸을때 닿는 점을 P'라고 하면 P와 P'사이의 거리를 구하면 된다. 이에 벡터 투영을 이용하면 된다. 벡터 투영 공식 1) 점 P에서 벡터 AB 방향으로 수직으로 내렸을 때, 그 투영 벡터의 길이만을 나타냄2) 1에서 구한 투영 길이에 AB방향의 단위 벡터를 곱해 투영벡터를 완성3) 내적공식을 통하여 cosθ.. 2025. 4. 10. 백준 C# - 15990 +) 풀이 문제 설명정수 N을 1,2,3 합으로 표현하는 방법의 수 조건 : 같은 수를 연속으로 두 번 이상 사용하면 안된다."1 + 1 + 2" ❌"1 + 2 + 1" ✅조건이 없는 경우 (연속된 숫자가 올 수 있는 경우) 백준 C# - 9095 +)풀이DP를 이용해서 풀어야한다. DP알아보러 가기 C# - 다이나믹 프로그래밍(DP) 다이나믹 프로그래밍 메모리를 적절히 사용하여 수행 시간 효율성을 향상 시키는 최적화 기법중 하나이다. 큰 문제를 작code-piggy.tistory.com점화식dp[n] = dp[n-1] + dp[n-2] + dp[n-3]조건이 있는 경우(연속된 숫자가 올 수 없는 경우)마지막 숫자만 확인하여 겹치게만 안하면 된다는 것이다. 다른말로 마지막 숫자만 체크하면 된다. dp[n][1] .. 2025. 4. 10. 백준 C# - 11053+) 풀이 문제풀이에 앞서 문제에서 제시된 시간복잡도를 분석해보자 제한 시간이 1초 → 일반적으로 연산량 1억 이내 가능하므로 입력에서 N의 크기가 1000이므로 O(N²)까지 허용된다.이 문제를 풀기 앞서 LIS 개념을 알고 풀이를 진행하자LIS(Longest Increasing Subsequence, 가장 긴 증가하는 부분 수열)란?수열에서 일부 원소를 "순서를 유지한 채"골라서 값이 점점 증가하도록 만든 부분 수열 중 가장 긴 길이의 구하는 문제이다.단 연손된 값일 필요는 없고, 앞에 선택된 값보다 커지기만 하면 된다. 예시[10, 20, 10, 30, 20, 50]→ 가장 긴 증가하는 부분 수열: 10 20 30 50 (길이 4) LIS은 전형적인 DP 문제이다.dp의 배열안에는 dp[i] : i번째 원소를.. 2025. 4. 9. 시간복잡도(빅오표기법)을 왜 알아야할까? 시간복잡도(빅오표기법)을 왜 알아야할까?개발을 할 때마다 매번 작성한 함수나 메서드의 시간 복잡도를 정확하게 계산하진 않는다. 실제 코드를 적을때는 함수 하나가 여러 파라미터를 받고 내부에서 또 다른 메서드를 호출하고 그 메서드가 또 다른 함수를 부르는 식으로 구조가 복잡해지는 경우가 많다. 이런 상황에서 일일이 모든 시간 복잡도를 구하는건 비효율적이고 현실적이지 않다. 그럼 시간복잡도는 신경 안 써도 될까?시간복잡도에 대한 개념을 잘 알고 있다면 코드를 짤때 동작하는 코드를 넘어서 더 나은 코드를 고민할 수 있는 능력이 생긴다.예를 들어 지금 작성하고 있는 코드에서 동작이 되긴하지만 더 최적화된 코드가 없을까?라는 질문을 스스로 할 수 있게 된다. 이는 꼭 O(n)과 O(n²)인지 계산하는게 중요한게 .. 2025. 4. 9. Unity - Unity 개발자가 왜 C++을 알아야할까? Unity 개발자가 왜 C++을 알아야할까? 1. Unity 엔진 자체가 C++로 만들어져있다.Unity는 엔진 레벨에서 C++로 동작하고 그 위에 C# 스크립팅 레이어가 올라가 있다. 그래서 GameObject, Rigidbody등과 같은 컴포넌트도 내부가 다 C++로 짜여있다. 쉽게 말해서 C#은 조종사, C++은 정비사라고 보면된다. C#스크립트에서 "이만큼 움직여!"라고 명령을 내리면 실제로 C++에서 만들어진 엔진코어가 명령을 받고 움직이는 역할을 한다. 한줄로 정리를 해보면 그래서 우리가 작성하는 C# 한줄의 코드도 실제로는 C++ 네이티브 함수를 호출하는 것이다.2. 네이티브 호출은 성능에 영향을 준다.네이티브 호출은 단순히 함수를 한 번 부르는 것이 아니라 C#에서 C++로 경계를 넘는 작.. 2025. 4. 8. 이전 1 2 3 4 ··· 85 다음 반응형