TIL
TIL day 46
gbleem
2025. 2. 24. 10:09
TIL day 45는 하루 쉬어가면서 없습니다.
1. 코딩테스트
오늘 오전에는 프로그래머스 level3 - 다단계 칫솔 판매 문제를 풀었습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/77486
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 뭘로 풀지?
- 문제는 트리 구조이긴 하지만, 크게 탐색할 것은 없고 while문을 통해 순환하면 해결할 수 있었습니다.
- 사용한 자료구조
- unordered_map
- 순환용
- 이름을 따라서 아래에서 위로 (리프에서 루트로) 순환을 해야하기 때문에, key와 value가 모두 string인 unordered_map을 사용했습니다.
- 아래에서 위로 올라가는 구조이기 때문에, key 하나에 value가 두 개가 되는 예외사항이나 정렬할 필요가 없으니 unordered_map이 적합한 컨테이너 입니다.
- 값 저장용
- 각 이름별로 얻은 수익을 저장하기 위해서 key가 string이고 value가 int인 unordered_map을 하나 더 만들었습니다.
- 이 또한 정렬될 필요없으며, 중복된 값이 들어올 일이 없습니다. 단순히 key로 검색만 하면 되니 unordered_map이 적합한 컨테이너 입니다.
- 순환용
- unordered_map
- 로직
- key값이 root가 되기 전까지 while문을 통해 아래에서 위로 올라가며 값을 계산하면 됩니다.
- 주의할 점
- 자신이 받은 분배액 혹은 이익금의 0.1을 추천인에게 먼저 주고, 남은 값을 자신이 가져야 한다는 점과
- 0.1을 곱한 분배액이 1 보다 작은 경우(소수점을 올려줘야 하는 경우) 자신이 모든 분배액을 가져야 한다는 점이었습니다.
- 코드
- 아래 코드에서 um_value[strKey] += (intValue - (int)(intValue * 0.1)); 이 부분만 신경쓰면 크게 어려운 부분은없는 문제였습니다.
#include <string>
#include <vector>
#include <unordered_map>
#include <iostream>
using namespace std;
unordered_map<string, string> um;
unordered_map<string, int> um_value;
vector<int> solution(vector<string> enroll, vector<string> referral, vector<string> seller, vector<int> amount)
{
vector<int> answer;
for(int i = 0; i < enroll.size(); ++i)
{
um[enroll[i]] = referral[i];
}
for(int i = 0; i < seller.size(); ++i)
{
string strKey = seller[i];
int intValue = amount[i] * 100;
while(strKey != "-")
{
if(intValue * 0.1 < 1)
{
um_value[strKey] += intValue;
break;
}
else
{
um_value[strKey] += (intValue - (int)(intValue * 0.1));
strKey = um[strKey];
intValue *= 0.1;
}
}
}
for(int i = 0; i < enroll.size(); ++i)
{
if(um_value[enroll[i]])
answer.push_back(um_value[enroll[i]]);
else
answer.push_back(0);
}
return answer;
}
2. 언리얼
캐릭터의 시점으로 아이템을 하나 선택해서 획득하는 시스템을 구현하였습니다.
UE5 Issues : 캐릭터 아이템 획득 로직 구현
이번 구현의 목적은 캐릭터가 화면의 중심으로 원하는 아이템을 하나만 선택해서 획득할 수 있도록 하는 것이다.그림으로 나타내면 아래와 같은 느낌이다.말로 정리해 보자면,아이템을 랜덤하
gbleem.tistory.com
금방 해결될 줄 알았는데 생각보다 오래 걸렸습니다...
특히 UI를 끄고 켜는 부분을 구현함에 있어서 어려움이 있었습니다.
- 캐릭터가 peeking을 해서 가리키는 물체만 UI를 띄워주고, peeking하지 않으면 UI 를 없애주는 로직을 구현하는데 어려움이 있었습니다.
- 특히 Tick 함수를 잘 안쓰려고 하다보니 어려웠던 것 같은데, Tick을 써서 해결은 하였지만 과연 이 방식이 좋은 방식이었는지는 좀 더 고민을 해봐야 할 것 같습니다.
내일은 인벤토리 관련 UI를 구현하고, 시간이 남으면 UI를 통한 캐릭터와 아이템 상호작용까지 구현해 볼 생각입니다.