1. 코딩 테스트
오전에 코딩 테스트 문제로 프로그래머스 level2 k진수에서 소수 개수 구하기 문제를 풀었습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/92335
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 뭘로 풀지?
- 문제를 보고 크게 세가지 작업을 하면 문제를 풀 수 있을 것이라는 생각이 들었습니다.
- 먼저, 해당 숫자를 k진수로 바꾸기
- while문을 통해서 n을 k로 나눈 나머지를 넣어주면 됩니다. (temp에 넣어주었습니다.)
- 생각할 점은 while문 탈출 조건이 n > k 이므로, while문을 탈출한 직후의 값도 저장해 주어야 합니다.
- 다음으로 k진수로 바뀐 숫자를 0을 제외한 다음 쪼개서 저장하기
- k진수로 만든 수를 넣은 벡터인 temp를 순환하면서 0을 기준으로 쪼개서 새로운 test 벡터에 넣어주었습니다.
- k진수로 바꾸는 작업을 통해서 temp 벡터에 값이 역으로 들어가게 됩니다.
- 예를 들어, 4를 2진수로 바꾼 경우 001이 temp에 들어있습니다.
- 그렇기 때문에 value를 만들 때, 인덱스는 0부터(뒤에서부터) 시작해서
- 0이 아닌 숫자라면, mul (10의 지수승 값을 가지는 값) 을 곱해서 value에 더해주고
- 0이라면, test 에 value를 넣어주고, value와 mul을 초기화하면 됩니다.
- 쪼개진 값들 중 소수 판별하기
- isprime 이라는 함수를 만들어서 해결하였습니다.
- 우리가 생각하는 수학적 로직과 같은 방식으로 동작하지만, 추가로 생각할 것은
- n 이 0인 경우도 들어올 수 있어서 if 문에서 n이 0일때 처리를 추가한 점과
- for문에서 i*i 를 사용한 부분입니다.
- for문에 대해 좀 더 자세히 설명을 해보자면,
- 이 부분은 N이라는 숫자의 가장 작은 1을 제외한 약수는 √N 이하라는 점을 이용한 것입니다.
- 그 결과 O(N) 의 복잡도를 O(√N) 으로 바꿀 수 있게 됩니다.
- 증명을 해보자면,
- 1을 제외한 가장 작은 약수는 x라고 하면, x ≤ (N/x) 이 성립하게 된다. (N/x 는 x의 반대편 약수)
- 위의 수식을 넘겨서 정리하면, x ≤ √N 이 됩니다.
- 먼저, 해당 숫자를 k진수로 바꾸기
- 주의점) 아직 이 부분은 많이 부족한 부분인데, 타입에 대한 부분입니다.
- long으로 적은 타입들을 모두 int로 하면, 11번 테케에서 실패가 떴습니다.
- 아마도 value 계산을 하면서, 값이 커져서 그부분에서 문제가 생겼다는 생각이 들었습니다.
- 범위를 넘어서서 문제가 생길 때를 찾는 것은 아직 어려워서 좀 더 많은 상황을 만나서 익숙해 져야 할 것 같습니다.
- 문제를 보고 크게 세가지 작업을 하면 문제를 풀 수 있을 것이라는 생각이 들었습니다.
- 정답 코드
#include <string>
#include <vector>
using namespace std;
bool isprime(long n)
{
if(n == 1 || n == 0)
return false;
for(long i = 2; i*i <= n; ++i)
{
if(n % i == 0)
return false;
}
return true;
}
int solution(int n, int k)
{
int answer = 0;
vector<int> temp;
vector<long> test;
while(n > k)
{
temp.push_back(n % k);
n /= k;
}
temp.push_back(n);
long value = 0;
long mul = 1;
for(int i = 0; i < temp.size(); ++i)
{
if(temp[i] != 0)
{
value += temp[i] * mul;
mul *= 10;
}
else if(temp[i] == 0)
{
test.push_back(value);
value = 0;
mul = 1;
}
}
test.push_back(value);
for(int i = 0; i < test.size(); ++i)
{
if(isprime(test[i]))
{
answer++;
}
}
return answer;
}
2. 언리얼 공부
어제 들었던 강의의 내용을 정리했습니다
- 언리얼 엔진 클래스, 함수, 변수의 리플렉션에 대한 내용입니다.
Unreal Engine - 클래스와 변수의 리플렉션 (매크로 지정자 위주)
이전에 관련 이론을 정리한 글https://gbleem.tistory.com/35 Unreal Property System (Reflection)참고자료https://unrealcommunity.wiki/unreal-property-system-(reflection)-36d1e6 Unreal Property System (Reflection) | Unreal Engine Community Wik
gbleem.tistory.com
- 언리얼엔진으로 게임을 만들때 기반이 되는 GameMode, Pawn, Character 관련 내용입니다.
Unreal Engine - GameMode, Pawn, Character
1. GameModeGameMode란게임의 전반적인 규칙과 흐름을 총괄 관리하는 컨트롤 타워 역할하는 클래스어떤 캐릭터를 스폰하는지,어떤 PlayerController를 사용할지,점수계산 방식 등의 주요 게임 플레이 로
gbleem.tistory.com
- 언리얼 엔진5부터 생긴 input system인 Enhanced Input System 관련 내용입니다.
Unreal Engine - Enhanced Input System (PlayerController)
1. PlayerControllerPlayerController란사용자가 키보드, 마우스, 게임 패드 등에서 입력을 받으면 해당 입력을 해석해서 캐릭터나 다른 오브젝트에게 동작을 명령하는 클래스 이다.이전에 언급한 GameMode
gbleem.tistory.com
- Enhanced Input System는 블루프린트를 사용하여 세팅을 해 본 것이 기억나서 예전에 정리했던 글도 다시 한번 읽어보고 공부를 했습니다.
Unreal Engine 5 TIL day 4
플레이어 캐릭터와 나만의 레벨 디자인1. Player CharacterMesh & Camera settingCharacter mesh를 선택하면, 디테일 창에 skeletal mesh를 선택할 수 있다.Camera는 Spring Arm을 먼저 만든 후 자식 컴포넌트로 Camera를
gbleem.tistory.com
- 마지막으로 애니메이션 수업은 들었지만, 정리는 아직 못해서 내일 과제를 진행하면서 애니메이션 관련 내용을 정리해 볼 예정입니다.
'TIL' 카테고리의 다른 글
TIL day 28 (2) | 2025.01.24 |
---|---|
TIL day 27 (0) | 2025.01.23 |
TIL day 25 (1) | 2025.01.21 |
TIL day 23 (0) | 2025.01.17 |
TIL day 21 (1) | 2025.01.15 |