TIL day 34

2025. 2. 6. 11:33·TIL

1. 코딩테스트


오늘 코딩테스트는 프로그래머스 level 2 호텔 대실 문제를 풀었습니다.

https://school.programmers.co.kr/learn/courses/30/lessons/155651

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

  • 뭘로 풀지?
    • string 처리와 우선순위 큐를 통해서 문제를 풀었습니다. (+정렬)
      • string 처리
        • 입력으로 들어온 값은 string이고 ":" 가 중간에 들어가있기 때문에 substr으로 해당 값을 없앤 후
        • stoi함수를 통해서 int값으로 변환하여 (시작 시간, 끝나는 시간) 순서로 넣어주었습니다. (vector에 넣어줌)
      • 정렬
        • vector를 sort 하는데, 이때 시작시간이 빠른 순서로 정렬하게 됩니다.
        • 그 결과 시작시간이 빠른 순서대로 vector를 순환하면서, 우선순위 큐에 값을 넣게 됩니다.
          • 우선순위 큐에 값을 넣을 때, (끝나는 시간, 시작 시간) 순서로 넣어주어야 합니다.
          • 그 이유는 우선순위 큐에서 끝나는 시간이 가장 빠른 순서대로 정렬되어 있기 때문에, 새로운 값을 넣기전에 빼는 작업을 해야하기 때문입니다.
          • 예를 들어
            • 우선순위 큐에 [[1520, 1420], [1700, 1500], [1920, 1410]] 이렇게 값이 있을때
            • [1820, 1640] 이 들어온다면, 1820이라는 시작시간이 가장 빠른 끝나는 시간인 1520보다 크기에 우선순위 큐에서 pop을 해서 객실의 수를 최소화 할 수 있습니다.
      • 주의점
        • 주의할 점은 시간에서 분 자리가 50을 넘는 경우는 시간으로 올림 처리하는 부분이 필요합니다.
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

int solution(vector<vector<string>> book_time) 
{
    int answer = 0;
    vector<pair<int,int>> vec;
    
    for(int i = 0; i < book_time.size(); ++i)
    {
        string temp1;
        string temp2;
        
        temp1 += book_time[i][0].substr(0,2);
        temp1 += book_time[i][0].substr(3,2);
        temp2 += book_time[i][1].substr(0,2);
        temp2 += book_time[i][1].substr(3,2);
        
        vec.push_back({stoi(temp1), stoi(temp2)});
    }
    
    sort(vec.begin(), vec.end());//start 기준으로 정렬
    priority_queue<pair<int, int>, vector<pair<int,int>>, greater<pair<int,int>> > pq; //end, start, 오름차순
    
    for(int i = 0; i < vec.size(); ++i)
    {
        //가장 빨리 끝나는 방 + 10 보다 새로운 방의 시작점이 늦으면 pop
        if(!pq.empty())
        {
            //시간 올림 처리
            int nextTime = pq.top().first + 10;
            if(nextTime % 100 >= 60)
            {                                
                nextTime = (nextTime / 100 + 1) * 100 + nextTime % 10;              
            }
             
            if(nextTime <= 2359 && nextTime <= vec[i].first)
                pq.pop();                
        }        
        pq.push({vec[i].second, vec[i].first});
        answer = max(answer, (int)pq.size());
    }
    
    return answer;    
}

 

 

2. 언리얼 공부


아이템 관련 공부를 진행중에 있습니다.

  • 아이템 충돌 및 클래스 구조에 관해서 공부를 하였습니다.

https://gbleem.tistory.com/66

 

Unreal Engine - 아이템 만들기 (+충돌 처리)

1. 목표게임상에서 캐릭터와 아이템 간의 충돌이 발생하면 특정 이벤트가 발생하도록 구현해야 한다.구현해야 할 것은 아래와 같다.아이템 클래스와 그것을 상속받은 여러 자식 아이템 클래스

gbleem.tistory.com

  • 랜덤한 아이템 스폰 및 캐릭터와의 연동 내용 공부중에 있습니다.

'TIL' 카테고리의 다른 글

TIL day 36  (0) 2025.02.10
TIL day 35  (2) 2025.02.07
TIL day 33  (0) 2025.02.05
TIL day 32  (0) 2025.02.04
TIL day 31  (0) 2025.02.03
'TIL' 카테고리의 다른 글
  • TIL day 36
  • TIL day 35
  • TIL day 33
  • TIL day 32
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    enhanced input system
    매크로 지정자
    C++
    const
    gamestate
    blend pose
    템플릿
    싱글턴
    motion matching
    addonscreendebugmessage
    Vector
    상속
    cin함수
    actor 클래스
    additive animation
    BFS
    applydamage
    DP
    map을 vector로 복사
    character animation
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
TIL day 34
상단으로

티스토리툴바