ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 2002] 추월
    백준/자료구조 2024. 1. 10. 14:01

    이 문제는 unordered_map을 사용하면 데이터를 읽고 쓰기 굉장히 쉽다

    알고리즘보다는 초반 자료구조 선택이 굉장히 큰 비중을 차지하고 있는 것 같아 자료구조 부분에 넣어놓는다

     

    일단 데이터 간 정렬이 필요하지 않는데

    데이터들을 key-value 쌍으로 저장해야하긴 한다

    왜냐하면 터널을 지나기 전에의 index와 터널을 지난 후의 index를 비교해야하기 때문이다.

     

    따라서 unordered_map으로 O(1)의 최고효율 탐색을 통해 코드와 시간복잡도를 줄일 수 있다

    초반에는 최장증가부분수열 문제인줄 알고 dp로 풀었으나 2%에 틀이 떠서 반례를 찾았다

    (24.8.21 코테 감 다시 잡는다고 두번째 풀었을때도 LIS로 풀다 첫번째에 틀림...)

     

    int lis() {
        for (int i = 0; i < N; i++) {
            dp[i] = 1;
            for (int k = 0; k < i; k++) {
                if (arr[i] > arr[k]) {
                    dp[i] = max(dp[i], dp[k] + 1);
                }
            }
        }
        return dp[N - 1];
    }

     

    4

    1234

    4231

     

    이렇게 하면 lis 사용하면 23이므로 답이 2(4-2)가 떠야한다

    근데 사실 답은 3이다.

    왜냐하면 423 이 추월한 차들이기 때문이다.

     

    따라서 다시보아하니 추월이란 개념이 상대적인 것이다.

    즉 내 뒤에 나보다 작은 놈이 있으면 나는 추월한 것이다.

     

    따라서 내 뒤에 작은 놈이 있는지 없는지만 확인해주면 되는 것이었다.

     


    #include <iostream>
    #include <unordered_map>
    #include <string>
    #include <bitset>
    
    #define SIZE 1001
    
    using namespace std;
    
    int N;
    int arr[SIZE];
    bitset<SIZE> visited;
    unordered_map<string, int> um;
    
    int ans = 0;
    
    void solve() {
    	int next = 1;
    	for (int i = 1; i <= N; i++) {
    		if (arr[i] > next) {
    			ans++;
    			visited[arr[i]] = 1;
    		}
    
    		else if (arr[i] == next) {
    			visited[next] = 1;
    			while (visited[next]) next++;
    		}
    	}
    }
    
    int main() {
    	ios::sync_with_stdio(0);
    	cin.tie(0); cout.tie(0);
    
    	cin >> N;
    
    	string s;
    	for (int i = 1; i <= N; i++) {
    		cin >> s;
    		um[s] = i;
    	}
    
    	for (int i = 1; i <= N; i++) {
    		cin >> s;
    		arr[i] = um[s];
    	}
    
    	solve();
    
    	cout << ans;
    
    	return 0;
    }

    '백준 > 자료구조' 카테고리의 다른 글

    [백준 1181] 단어 정렬  (1) 2025.02.03
    [백준 1539] 이진 검색 트리  (2) 2024.02.09
    [백준 25758] 유전자 조합  (0) 2024.02.06
    [백준 2108] 통계학  (0) 2023.10.26
    [백준 13414] 수강신청  (0) 2023.03.31