TIL day 31

2025. 2. 3. 10:59·TIL

1. 코딩테스트


오늘은 프로그래머스 level 2 전력망을 둘로 나누기를 풀었습니다.

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

 

프로그래머스

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

programmers.co.kr

  • 뭘로 풀지?
    • 트리 구조 + 완전 탐색 + bfs탐색
    • 모든 경우의 수를 돌면서 트리 구조로 주어진 데이터를 벡터를 통해서 데이터를 저장한 다음, bfs를 통해서 트리의 갯수를 세서 풀었습니다.
    • 좀 더 자세한 과정
      • 모든 wires의 경우를 돌면서 한 가지씩 끊어서 adj라는 벡터에 데이터를 저장했습니다. 
        • idx라는 변수를 통해 adj에 넣지 않을 데이터를 구분해 주었습니다.
        • n이 100 이하였기 때문에, 그냥 모든 경우의 수를 돌아도 괜찮을 것 같다고 생각했습니다.
      • 이후 bfs를 통해서 연결된 갯수를 구했습니다.
        • 시작점은 1로 해서 탐색을 하였고, 일반적인 bfs를 진행하였습니다.
        • 방문하지 않은 곳이라면 ans라는 변수에 +1을 해서, 연결된 노드의 갯수를 구해서 return 하였습니다.
      • bfs의 결과와 전체 간선의 갯수를 통해 간선의 차이를 구했습니다.
        • temp1은 bfs의 결과를 저장하였고, total은 전체 간선의 갯수입니다.
        • temp2 = total - temp1 - 1; 을 통해 bfs로 탐색하지 않은 간선의 갯수를 구했습니다.
        • answer = min(answer, abs(temp1 - temp2)); 를 통해 간선의 갯수가 최소가 되는 값을 구해주었습니다.
  • 코드
#include <string>
#include <vector>
#include <queue>
#include <climits>
using namespace std;

vector<int> adj[102];
int vis[102];

int bfs(vector<int> adj[])
{
    int ans = 0;
    fill(vis, vis + 102, 0);
    
    queue<int> q;    
    q.push(1);
    vis[1] = 1;
    
    while(!q.empty())
    {
        int cur = q.front();
        q.pop();
        
        for(int nxt : adj[cur])
        {
            if(!vis[nxt])
            {
                q.push(nxt);
                vis[nxt] = 1;
                ans++;
            }
        }
    }
    return ans;
}

int solution(int n, vector<vector<int>> wires) 
{
    int answer = INT_MAX;
    int total = wires.size();
    int idx = 0;
    
    while(idx < wires.size())
    {        
        for(int i = 0; i < 100; ++i)
            adj[i].clear();
        for(int i = 0; i < wires.size(); ++i)
        {
            if(i == idx)
                continue;
            adj[wires[i][0]].push_back(wires[i][1]);
            adj[wires[i][1]].push_back(wires[i][0]);
        }   
        
        int temp1 = bfs(adj);
        int temp2 = total - temp1 - 1;
        
        answer = min(answer, abs(temp1 - temp2));                
        idx++;
    }
    return answer;
}

 

 

 

2. 과제


과제 ch6을 완료하고, 제출하였습니다. 

  • 깃허브에 readme 작성도 하고, 시연 영상도 찍어서 업로드 하였습니다.

https://github.com/GBL22M/SCC_CH3-6

 

GitHub - GBL22M/SCC_CH3-6

Contribute to GBL22M/SCC_CH3-6 development by creating an account on GitHub.

github.com

  • 정리하는 과정에서 Data Table을 처음 사용해 보아서 관련 내용도 정리해 보았습니다.

https://gbleem.tistory.com/59

 

Unreal Engine - Data Table

1. Data Table 만들기Data Table은 언리얼에서 많은 데이터를 처리할 때 사용하기 유용한 방식이다. (CSV 사용 가능)이번 예시는 data table에 actor를 스폰할 위치를 지정해두고, spawner를 통해 해당 위치에

gbleem.tistory.com

 

'TIL' 카테고리의 다른 글

TIL day 33  (0) 2025.02.05
TIL day 32  (0) 2025.02.04
TIL day 30  (2) 2025.01.31
TIL day 29  (2) 2025.01.27
TIL day 28  (2) 2025.01.24
'TIL' 카테고리의 다른 글
  • TIL day 33
  • TIL day 32
  • TIL day 30
  • TIL day 29
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (32)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바