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이 적합한 컨테이너 입니다.
    • 로직
      • 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. 언리얼


캐릭터의 시점으로 아이템을 하나 선택해서 획득하는 시스템을 구현하였습니다.

https://gbleem.tistory.com/97

 

UE5 Issues : 캐릭터 아이템 획득 로직 구현

이번 구현의 목적은 캐릭터가 화면의 중심으로 원하는 아이템을 하나만 선택해서 획득할 수 있도록 하는 것이다.그림으로 나타내면 아래와 같은 느낌이다.말로 정리해 보자면,아이템을 랜덤하

gbleem.tistory.com

 

금방 해결될 줄 알았는데 생각보다 오래 걸렸습니다...

특히 UI를 끄고 켜는 부분을 구현함에 있어서 어려움이 있었습니다. 

  • 캐릭터가 peeking을 해서 가리키는 물체만 UI를 띄워주고, peeking하지 않으면 UI 를 없애주는 로직을 구현하는데 어려움이 있었습니다.
  • 특히 Tick 함수를 잘 안쓰려고 하다보니 어려웠던 것 같은데, Tick을 써서 해결은 하였지만 과연 이 방식이 좋은 방식이었는지는 좀 더 고민을 해봐야 할 것 같습니다.

내일은 인벤토리 관련 UI를 구현하고, 시간이 남으면 UI를 통한 캐릭터와 아이템 상호작용까지 구현해 볼 생각입니다.