λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Algorithm/BOJ

[BOJ] ν–‰μš΄μ˜ 바퀴(2840)

[λ°±μ€€(BOJ)] ν–‰μš΄μ˜ 바퀴(2840) C++

문제 : BOJ_2840번 ν–‰μš΄μ˜ 바퀴

문제 μ„€λͺ…

κ΅¬ν˜„

μ €μ—κ²ŒλŠ” μ–΄λ €μš΄ κ΅¬ν˜„ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.

N개의 μˆ«μžκ°€ μ›ν˜•μœΌλ‘œ μ“°μ—¬μžˆλŠ” μ›ν˜• νŒμ„ 항상 μ‹œκ³„λ°©ν–₯으둜 λŒλ¦½λ‹ˆλ‹€.

μ΄λ•Œ λŒμ•„κ°„ 칸의 μˆ˜μ™€ κ°€λ¦¬ν‚€λŠ” 칸에 μ“°μ—¬μžˆλŠ” μ•ŒνŒŒλ²³ λ¬Έμžκ°€ K 번 μž…λ ₯λ©λ‹ˆλ‹€.

이λ₯Ό λ°”νƒ•μœΌλ‘œ λ§ˆμ§€λ§‰μœΌλ‘œ κ°€λ¦¬ν‚€λŠ” μΉΈλΆ€ν„° μˆœμ„œλŒ€λ‘œ μ›ν˜•μ˜ μ•ŒνŒŒλ²³μ„ 좜λ ₯ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.


Solution

μ €λŠ” μš°μ„  크기에 λ§žλŠ” 벑터 배열을 ν• λ‹Ήν–ˆμŠ΅λ‹ˆλ‹€.

또 μ›ν˜• νŒμ„ ν•˜λ‚˜μ˜ λ°°μ—΄λ‘œ μƒκ°ν–ˆκ³ , 순회 μ‹œμΌ°μŠ΅λ‹ˆλ‹€.

μ΄λ•Œ μ›ν˜• 판이 μ‹œκ³„λ°©ν–₯으둜 λŒμ•„κ°„λ‹€λŠ” 것은 λ°°μ—΄μ˜ μž…μž₯에선 λ§ˆμ΄λ„ˆμŠ€λ‘œ λ„λŠ” 것이기 λ•Œλ¬Έμ— νšŒμ „ν•œ μΉΈ 수만큼 λ§ˆμ΄λ„ˆμŠ€λ₯Ό ν•˜μ—¬ 문자λ₯Ό λ„£μ–΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ œκ°€ μ–΄λ €μ› λ˜ μ΄μœ λŠ” μ€‘λ³΅λœ 값을 μ²˜λ¦¬ν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

  • 문자λ₯Ό 넣어쀄 λ•Œ, 문자λ₯Ό 전에 넣은 칸이 μ•„λ‹Œλ° 넣을 λ¬Έμžμ™€ λ‹€λ₯Έ λ¬Έμžκ°€ μžˆμ„ λ•Œ
  • 문자λ₯Ό λͺ¨λ‘ 넣은 λ’€ μ„œλ‘œ λ‹€λ₯Έ μΈλ±μŠ€μ— 같은 λ¬Έμžκ°€ λ“€μ–΄κ°€ μžˆμ„ λ•Œ
  • λ˜ν•œ νšŒμ „μˆ˜κ°€ μ›ν˜• 판 칸의 크기λ₯Ό λ„˜κΈΈ 수 μžˆμœΌλ―€λ‘œ N으둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ‘œ μ²˜λ¦¬ν•΄ μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.*

    μœ„ 두 가지λ₯Ό λͺ¨λ‘ μ²˜λ¦¬ν•΄ μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

Description

  • 처음 배열에 λͺ¨λ‘ λ¬Έμžμ—΄ '?'λ₯Ό ν• λ‹Ήν•΄ μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.
  • νšŒμ „μˆ˜ cntλ₯Ό 받은 λ’€ cnt %= N;λ₯Ό μ‹€ν–‰ν•˜κ³  μ²˜λ¦¬ν•΄ μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

#include <iostream>
#include <vector>
using namespace std;
int main(void) {
    int N, K;
    cin >> N >> K;
    vector<char> adj(N);
    for (int i = 0; i < N; i++) adj[i] = '?';
    int now = 0;
    for (int i = 0; i < K; i++) {
        int cnt;
        char value;
        cin >> cnt >> value;
        cnt %= N;
        now -= cnt;
        if (now < 0) now += N;
        if (adj[now] != '?' && adj[now] != value) {
            cout << "!\n";
            return 0;
        }
        else adj[now] = value;
    }
    for (int i = 0; i < N-1; i++) {
        for (int j = i + 1; j < N; j++) {
            if (adj[i] != '?' && adj[i] == adj[j]) {
                cout << "!\n";
                return 0;
            }
        }
    }
    int rot = N;
    while (rot--) {
        cout << adj[now];
        now++;
        if (now == N) now = 0;
    }
    cout << '\n';
    return 0;
}

'Algorithm > BOJ' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] 백쑰의 호수(3197)  (0) 2022.03.10
[BOJ] ν›„μœ„ ν‘œκΈ°μ‹(1918)  (0) 2022.03.10
[BOJ] νšŒμ „ν•˜λŠ” 큐(1021)  (0) 2022.03.10
[BOJ] 였λ₯΄λ§‰ 수(11057)  (0) 2022.03.09
[BOJ] 제곱수의 ν•©(1699)  (0) 2022.03.09