๋ฐฑ์ค€/C++

[๋ฐฑ์ค€/C++] 16936๋ฒˆ ๋‚˜3๊ณฑ2

yulee_to 2022. 7. 10. 23:43

๋ฐฑ์ค€ ๋กœ๊ณ 
๋ฐฑ์ค€
16936๋ฒˆ ๋‚˜3๊ณฑ2

 


๐Ÿค”๋ฌธ์ œ ์ดํ•ด

๋‹ค์Œ ๊ฐ’์ด ํ˜„์žฌ ๊ฐ’์„ 3์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์ด๊ฑฐ๋‚˜ 2๋ฅผ ๊ณฑํ•œ ๊ฐ’์œผ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ์ˆ˜์—ด์„ ๋’ค์„ž์–ด ๋†“์€ ๊ฒŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๊ณ , ๋’ค์„ž๊ธฐ ์ „์˜ ํ˜•ํƒœ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค!


๐Ÿ’ก์ฒซ๋ฒˆ์งธ ์•„์ด๋””์–ด

์ฃผ์–ด์ง„ ์˜ˆ์ œ1์—์„œ๋Š” N์ด 6์ด๊ณ  ์ˆ˜์—ด B๋Š” 4 8 6 3 12 9์˜€๋‹ค. ๊ฐ ์ˆซ์ž๋ณ„๋กœ ์ด์ „์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’(*2ํ•˜๊ธฐ ์ „, /3ํ•˜๊ธฐ ์ „ ๊ฐ’)๊ณผ ๋‹ค์Œ์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’(*2ํ•œ ํ›„, /3ํ•œ ํ›„)์„ ์ ์–ด๋ณด์•˜๋‹ค. ์ด์ „๊ณผ ์ดํ›„์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด ๋ช…ํ™•ํ•ด ๋ณด์—ฌ์„œ ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ๊ตฌํ˜„ํ•ด๋ดค๋‹ค.

ํ•ด๋‹น ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์•ž ๋’ค๋กœ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ๋Š” list๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

list๋ฅผ ์ฑ„์›Œ๋„ฃ๊ธฐ ์œ„ํ•ด ์ž…๋ ฅ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ 0๋ถ€ํ„ฐ n-1๊นŒ์ง€ for๋ฌธ์œผ๋กœ ๋ˆ๋‹ค.

list๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด์ „์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’๊ณผ ๋‹ค์Œ์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด ํ•ด๋‹น ๋ฐฐ์—ด์— ์กด์žฌํ•˜๋ฉด ์ˆœ์„œ์— ๋งž๊ฒŒ list์— ๋„ฃ์–ด์ฃผ๊ณ ,

list๊ฐ€ ๋น„์–ด ์žˆ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ v[i]์˜ ์ด์ „์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’๊ณผ ๋‹ค์Œ์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด ํ•ด๋‹น ๋ฐฐ์—ด์— ์กด์žฌํ•˜๋”๋ผ๋„ list์˜ ๋งจ ์•ž๊ณผ ๋์— ๋„ฃ์„ ์ˆ˜ ์—†์œผ๋ฉด pass, ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฉด ์ˆœ์„œ์— ๋งž๊ฒŒ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์ƒ๊ฐํ–ˆ๋‹ค.

 

โŒ์ฒซ๋ฒˆ์งธ ์ œ์ถœ(๋Ÿฐํƒ€์ž„์—๋Ÿฌ - IntegerOverflow)

IntegerOverflow๊ฐ€ ๋ฐœ์ƒ.

๋ฌธ์ œ์˜ ์กฐ๊ฑด์— ์ˆ˜์—ด B์— ํฌํ•จ๋œ ์›์†Œ๊ฐ€ 10^18๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ž„์„ ๋ณด์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค...

int๋กœ ์„ ์–ธํ•ด์ค€ ๋ณ€์ˆ˜๋“ค์„ unsigned long long int๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๊ณ , boolํƒ€์ž…์˜ exist ๋ฐฐ์—ด์€ ๋ชจ๋“  ๊ฐ’์„ ํ‘œํ˜„ํ•ด์ค„ ์ˆ˜ ์—†์–ด ๋นผ๊ณ  ๊ณ ์ณ์„œ ๋‹ค์‹œ ์ œ์ถœํ•ด์ฃผ์—ˆ๋‹ค.

โŒ๋‘๋ฒˆ์งธ ์ œ์ถœ(๋Ÿฐํƒ€์ž„์—๋Ÿฌ - InvalidPointer)

์ด๋ฒˆ์—” invalidPointer๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋–ด๋Š”๋ฐ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ดค๋Š”๋ฐ๋„ ์ •ํ™•ํ•œ ์ด์œ ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค.

๋ฒกํ„ฐ์˜ ํฌ์ธํ„ฐ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ๊ณ  ํ• ๋‹น๋œ ๋ฒกํ„ฐ์˜ ํฌ์ธํ„ฐ๋ฅผ free()ํ•  ๋•Œ ์ฒ˜์Œ ํ• ๋‹น์‹œ ์„ ์–ธํ•œ ๋ฒกํ„ฐ์˜ ํฌ์ธํ„ฐ ์ฃผ์†Œ์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋œ ํ›„ ๋ฐ”๋€ ๋ฒกํ„ฐ์˜ ํฌ์ธํ„ฐ ์ฃผ์†Œ๊ฐ€ ๋‹ฌ๋ผ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ์ „ํ˜€ ๋ชจ๋ฅด๊ฒ ์—ˆ๋‹ค...

๋ญ”๊ฐ€ Node ๊ฐ์ฒด ๋ฐฐ์—ด์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฑฐ๋ผ๊ณ  ์˜ˆ์ƒํ•ด์„œ map[i] = Node(a)๋ฅผ ํ•ด์ฃผ๋˜ ๊ฒƒ์„ map[i].setting(a)๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ์ฒด์˜ ๊ฐ’๋“ค์„ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์„ธํŒ…ํ•ด์ฃผ์—ˆ๋‹ค.

โŒ์„ธ๋ฒˆ์งธ ์ œ์ถœ(๋Ÿฐํƒ€์ž„์—๋Ÿฌ - InvalidPointer)

์ด๋ฒˆ์—๋„ InvalidPointer.

์ฐจ๋ผ๋ฆฌ Node๊ฐ์ฒด๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  pair๋กœ ๊ตฌ์„ฑ๋œ vector๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ์ง€์ €๋ถ„ํ•ด์กŒ์ง€๋งŒ ์ผ๋‹จ ๋งž์ถ”๊ณ ์ž ํ•˜๋Š” ๋งˆ์Œ์ด ์ปธ๋‹ค. 

 

โŒ๋„ค๋ฒˆ์งธ ์ œ์ถœ(๋Ÿฐํƒ€์ž„์—๋Ÿฌ - InvalidPointer)

์—ญ์‹œ๋‚˜ InvalidPointer ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค. ์ด ์—๋Ÿฌ๋กœ 3,4์‹œ๊ฐ„์„ ๊ณ ํ†ต๋ฐ›๋‹ค ๋ณด๋‹ˆ ๊ฒฐ๊ตญ ๋ฉ˜ํ† ํ•œํ…Œ ์งˆ๋ฌธํ–ˆ๋‹ค.

๋ฉ˜ํ† ๋‹˜์˜ ๋„์›€์œผ๋กœ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ œ์ถœํ•ด๋ณด์•˜๋‹ค.

โŒ๋‹ค์„ฏ๋ฒˆ์งธ ์ œ์ถœ(๋Ÿฐํƒ€์ž„์—๋Ÿฌ - InvalidPointer)

4๋ฒˆ์˜ InvalidPointer ์—๋Ÿฌ๊ฐ€ ๋œจ๊ณ  ๋‚˜์„œ์•ผ ์• ์ดˆ์— ์ด ๋ฐฉ๋ฒ•์ด ์ž˜๋ชป๋˜์—ˆ์Œ์„ ์•Œ์•˜๋‹ค.๐Ÿ™„

๋งŒ์•ฝ N=7์ด๊ณ  27 4 8 6 3 12 9 16์ด ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด์™”์„ ๋•Œ ๊ณ„์† ๊ณ ์ง‘ํ•˜๋˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด

์ •๋‹ต ๋ฐฐ์—ด์—๋Š” 27 9 3 6 12 4๊นŒ์ง€๋งŒ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

์ฆ‰ 27๋กœ ์ธํ•ด ๋“ค์–ด๊ฐ„ 27 9 ๋•Œ๋ฌธ์— 4์—์„œ ์ด์ „๊ฐ’ 12์™€ ์ดํ›„ ๊ฐ’8์ด ์žˆ์Œ์—๋„ list์˜ ์•ž ๋’ค์— ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•ด ์ง€๋‚˜์น˜๊ฒŒ ๋œ๋‹ค ! 

 

์—ด์‹ฌํžˆ ์ง  ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ์— ์ง€์›Œ๋ฒ„๋ฆฌ๊ณ  ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ๋ณด์•˜๋‹ค.

 


๐Ÿ’ก๋‘๋ฒˆ์งธ ์•„์ด๋””์–ด

๋ฐฅ๋จน๋‹ค๊ฐ€ ๋ถˆํ˜„๋“ฏ ๋ฐฑํŠธ๋ž˜ํ‚น์ด ์ƒ๊ฐ๋‚ฌ๋‹ค !

 

๐Ÿ”ฅํ’€์ด๐Ÿ”ฅ

N์ด 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฏ€๋กœ N^3๋ณด๋‹จ ์ž‘์œผ๋‹ˆ ์‹œ๊ฐ„์—” ๋ฌธ์ œ ์—†์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ๊ณ , ํ•œ ๊ฐ’์˜ ์ดํ›„์— ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆ˜(/3 or *2)๊ฐ€ ๋‘˜๋‹ค ์ž…๋ ฅ ๋ฐฐ์—ด์— ์กด์žฌํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

 

Solveํ•จ์ˆ˜ ์„ค๋ช…

1. Solve ํ•จ์ˆ˜ ์ˆ˜ํ–‰ ์ „์— ์ด๋ฏธ ์ž…๋ ฅ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ •๋‹ต ๋ฐฐ์—ด์— ๋„ฃ์–ด์คฌ์œผ๋ฏ€๋กœ n-2๋ฒˆ๋งŒ ๋ฐ˜๋ณต๋ฌธ์„ ๋ˆ๋‹ค.

2. n-2๋ฒˆ ๋™์•ˆ ์ž…๋ ฅ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ ์ˆœํšŒํ•ด์„œ ์ •๋‹ต ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ /3ํ•˜๊ฑฐ๋‚˜ *2ํ•œ ๊ฐ’์ด ์ž…๋ ฅ ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ •๋‹ต ๋ฐฐ์—ด ๋งจ ๋’ค์— ๋„ฃ์–ด์ค€๋‹ค.

3. /3ํ•˜๊ฑฐ๋‚˜ *2ํ•œ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์—” continue

4. ๋ฐ”๊นฅ์ชฝ ๋ฐ˜๋ณต๋ฌธ์ด n-2๋ฒˆ์งธ ๋Œ ๋•Œ ์ •๋‹ต ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ N๊ณผ ๊ฐ™๋‹ค๋ฉด ์ •๋‹ต ๋ฐฐ์—ด์„ ์ถœ๋ ฅ, ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด return ํ•ด์ค€๋‹ค.

 

โŒ์—ฌ์„ฏ๋ฒˆ์งธ ์ œ์ถœ(์ปดํŒŒ์ผ์—๋Ÿฌ)

์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€๋ ค๋‹ค๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์•˜๋˜ bool ํƒ€์ž…์˜ visited๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋Š” memset ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ #include <string.h>๋ฅผ ์ ์ง€ ์•Š์•„ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค.๐Ÿฅฒ

์ข…์ข… ์žˆ์—ˆ๋˜ ์‹ค์ˆ˜์ธ๋ฐ๋‹ค ๋ฐฑ์ค€์—์„œ ์•Œ๋ ค์ค˜์„œ ๊ธˆ๋ฐฉ ๊ณ ์ณค๋‹ค.

โญ•๏ธ์ผ๊ณฑ๋ฒˆ์งธ ์ œ์ถœ(๋งž์•˜์Šต๋‹ˆ๋‹ค!!)

ํ•„์š” ์—†๋Š” visited ๋ฐฐ์—ด์„ ์—†์• ์ฃผ๊ณ  ์ œ์ถœํ•ด์„œ ์ •๋‹ต์ด ๋–ด๋‹ค!


16936๋ฒˆ ๋‚˜3๊ณฑ2

 

์•„๋ž˜๋Š” ์ œ์ถœํ•œ ์ฝ”๋“œ์ด๋‹ค.

#include <iostream>
#include <vector>

using namespace std;
typedef unsigned long long ull;

vector<ull> v;
bool visited[101];
int n;

void Solve(vector<ull> ans) {
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (ans.back() % 3 == 0 && v[j] == ans.back() / 3) {
                ans.push_back(v[j]);
            } else if (v[j] == ans.back() * 2) {
                ans.push_back(v[j]);
            }
        }
        if (i == (n - 1)) {
            if (ans.size() == n) {
                for (int k = 0; k < n; k++) {
                    cout << ans[k] << " ";
                }
            } else {
                return;
            }
        }
    }
}

int main() {
    cin.tie(NULL);
    ios::sync_with_stdio(false);
    cin >> n;
    ull a;
    for (int i = 0; i < n; i++) {
        cin >> a;
        v.push_back(a);
    }
    for (int i = 0; i < n; i++) {
        vector<ull> ans;
        ans.push_back(v[i]);
        Solve(ans);
    }
}

 

์žฌ๊ท€๋กœ ๋” ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ ์žฌ๊ท€๋ฅผ ์ž˜ ๋ชปํ•ด์„œ ํ‘ธ๋Š” ๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค.

 

728x90