TIL day 43

2025. 2. 19. 16:01·TIL

1. 코딩테스트


오늘 오전에는 오랜만에 코딩테스트 문제를 풀었습니다...(매일 풀어야 할텐데)

프로그래머스 레벨 2 메뉴 리뉴얼 문제를 풀었습니다.

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

 

프로그래머스

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

programmers.co.kr

  • 뭘로 풀지?
    • orders 라는 배열의 크기가 20 이하이기 때문에, 모든 경우의 수를 백트래킹으로 뽑은 후, map을 이용해서 수를 세면 될 것 같다는 생각이 들었습니다.
    • 백트래킹
      • 모든 경우의 수를 체크하는 방식 중 하나입니다. 
      • 재귀함수를 통해 쉽게 모든 경우의 수를 구할 수 있습니다.
      • 이 문제에서는 특정 string(str)에서 특정 갯수(size) 만큼 선택한 후 처리를 해주면 됩니다.
    • map
      • Choose를 통해 조건 (res.size() == size)  을 만족하는 경우 map에 해당 string을 넣어준 후 개수를 측정해 주었습니다.
      • 이후 모든 경우의 수를 다 체크하면, map을 돌면서 최대 count 수를 찾고(maxCnt)
      • 다시 map을 돌면서 maxCnt와 같은 value값을 가지는 key를 answer에 push_back 해주면 됩니다.
    • 주의할 점
      • 백트래킹을 통해 조합을 구하기 때문에, orders 각각의 string이 정렬된 상태여야 하고,
      • map은 course마다 초기화 해주어야 한다는 것입니다.
      • 마지막으로  answer도 정렬을 해서, 문제에서 원하는 답을 찾아주면 됩니다.
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <iostream>
using namespace std;

bool isUsed[30];
vector<int> ans;
map<string, int> m;

void Choose(int size, string str, string res)
{
    if(res.size() == size)
    {
        m[res]++;
        //for(auto r : res)
        //    cout << r;
        //cout<<"\n";
    }
        
    for(int i = 0; i < str.size(); ++i)
    {
        Choose(size, str.substr(i + 1), res + str[i]);
    }
}

vector<string> solution(vector<string> orders, vector<int> course) 
{
    vector<string> answer;
    
    for(auto& o : orders)    
        sort(o.begin(), o.end());
    
    for(int i = 0; i < course.size(); ++i)
    {
        for(int j = 0; j < orders.size(); ++j)        
            Choose(course[i], orders[j], "");
        
        int maxCnt = -1;
        for(const auto& mi : m)
            maxCnt = max(maxCnt, mi.second);
        
        for(const auto& mi : m)
        {
            if(maxCnt >= 2 && maxCnt == mi.second) //최대인 경우
            {
                answer.push_back(mi.first);
            }
        }
        
        m.clear();
    }
    
    sort(answer.begin(), answer.end());
    return answer;
}

 

 

2. 언리얼


  • 캐릭터 공격 로직 추가
    • 좌클릭시 공격
      • 연사 및 단발 구현
      • 연사 속도 구현
    • r 누르면 장전
  • 캐릭터 아이템 획득 로직 구현 중
    • overlap된 순간 trace를 통한 아이템 peeking 시스템 구현 예정

'TIL' 카테고리의 다른 글

TIL day 46  (0) 2025.02.24
TIL day 44  (0) 2025.02.20
TIL day 42  (0) 2025.02.18
TIL day 41  (0) 2025.02.17
TIL day 40  (0) 2025.02.14
'TIL' 카테고리의 다른 글
  • TIL day 46
  • TIL day 44
  • TIL day 42
  • TIL day 41
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바