Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / C++] ์ˆซ์ž ์•ผ๊ตฌ ํ’€์ด

meeeeejin 2020. 7. 30. 13:46

๋ฌธ์ œ

 

<๋ฌธ์ œ ์„ค๋ช…>

 

์ˆซ์ž ์•ผ๊ตฌ ๊ฒŒ์ž„์ด๋ž€ 2๋ช…์ด ์„œ๋กœ๊ฐ€ ์ƒ๊ฐํ•œ ์ˆซ์ž๋ฅผ ๋งž์ถ”๋Š” ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. ๊ฒŒ์ž„ํ•ด๋ณด๊ธฐ

 

๊ฐ์ž ์„œ๋กœ ๋‹ค๋ฅธ 1~9๊นŒ์ง€ 3์ž๋ฆฌ ์ž„์˜์˜ ์ˆซ์ž๋ฅผ ์ •ํ•œ ๋’ค ์„œ๋กœ์—๊ฒŒ 3์ž๋ฆฌ์˜ ์ˆซ์ž๋ฅผ ๋ถˆ๋Ÿฌ์„œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ† ๋Œ€๋กœ ์ƒ๋Œ€๊ฐ€ ์ •ํ•œ ์ˆซ์ž๋ฅผ ์˜ˆ์ƒํ•œ ๋’ค ๋งžํž™๋‹ˆ๋‹ค.

 

 

  • ์ˆซ์ž๋Š” ๋งž์ง€๋งŒ, ์œ„์น˜๊ฐ€ ํ‹€๋ ธ์„ ๋•Œ๋Š” ๋ณผ
  • ์ˆซ์ž์™€ ์œ„์น˜๊ฐ€ ๋ชจ๋‘ ๋งž์„ ๋•Œ๋Š” ์ŠคํŠธ๋ผ์ดํฌ
  • ์ˆซ์ž์™€ ์œ„์น˜๊ฐ€ ๋ชจ๋‘ ํ‹€๋ ธ์„ ๋•Œ๋Š” ์•„์›ƒ

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฉด

 

  • A : 123 B : 1์ŠคํŠธ๋ผ์ดํฌ 1๋ณผ.
  • A : 356 B : 1์ŠคํŠธ๋ผ์ดํฌ 0๋ณผ.
  • A : 327 B : 2์ŠคํŠธ๋ผ์ดํฌ 0๋ณผ.
  • A : 489 B : 0์ŠคํŠธ๋ผ์ดํฌ 1๋ณผ.

 

์ด๋•Œ ๊ฐ€๋Šฅํ•œ ๋‹ต์€ 324์™€ 328 ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

 

์งˆ๋ฌธํ•œ ์„ธ ์ž๋ฆฌ์˜ ์ˆ˜, ์ŠคํŠธ๋ผ์ดํฌ์˜ ์ˆ˜, ๋ณผ์˜ ์ˆ˜๋ฅผ ๋‹ด์€ 2์ฐจ์› ๋ฐฐ์—ด baseball์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€๋Šฅํ•œ ๋‹ต์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

 

<์ œํ•œ์‚ฌํ•ญ>

  • ์งˆ๋ฌธ์˜ ์ˆ˜๋Š” 1 ์ด์ƒ 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • baseball์˜ ๊ฐ ํ–‰์€ [์„ธ ์ž๋ฆฌ์˜ ์ˆ˜, ์ŠคํŠธ๋ผ์ดํฌ์˜ ์ˆ˜, ๋ณผ์˜ ์ˆ˜] ๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

https://programmers.co.kr/learn/courses/30/lessons/42841

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ˆซ์ž ์•ผ๊ตฌ

[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] 2

programmers.co.kr

 

 

 

๋ฌธ์ œ ํ’€์ด

 

์™„์ „ ํƒ์ƒ‰ ๋ฌธ์ œ์ธ ๋งŒํผ ๋ชจ๋“  ์ •๋‹ต์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ ๋ คํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค. 

 

1. ์ˆซ์ž ์•ผ๊ตฌ์˜ ์ •๋‹ต์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ƒ์„ฑํ•ด candidate ๋ฒกํ„ฐ์— ์ €์žฅํ•œ๋‹ค.

2. candidate์˜ ์›์†Œ ์ค‘ ์ฃผ์–ด์ง„ ์ž…๋ ฅ์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์‚ญ์ œํ•œ๋‹ค. 

 

 

1. ์ˆซ์ž ์•ผ๊ตฌ์˜ ์ •๋‹ต์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ƒ์„ฑํ•ด candidate ๋ฒกํ„ฐ์— ์ €์žฅํ•œ๋‹ค.

1~9๊นŒ์ง€์˜ ์ˆ˜ ์ค‘ ์ค‘๋ณต ์—†์ด ์„ธ ๊ฐ€์ง€ ์ˆซ์ž๋ฅผ ๊ณจ๋ผ ์ •๋‹ต์„ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ •๋‹ต์€ 123 ์ด์ƒ 987 ์ดํ•˜์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋‹ต์„ ๋งŒ๋“ค ๋•Œ, 0์ด ๋“ค์–ด๊ฐ€๊ฑฐ๋‚˜ ๊ฐ™์€ ์ˆซ์ž๊ฐ€ 2๋ฒˆ ์ด์ƒ ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

 

2. candidate์˜ ์›์†Œ ์ค‘ ์ฃผ์–ด์ง„ ์ž…๋ ฅ์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์‚ญ์ œํ•œ๋‹ค. 

์ž„์˜์˜ ์ˆ˜ n์ด ์งˆ๋ฌธ์— ๋ถ€ํ•ฉํ•˜๋Š” ์ •๋‹ต ํ›„๋ณด์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜ isCandidate๋ฅผ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณผ๊ณผ ์ŠคํŠธ๋ผ์ดํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ ์ž…๋ ฅ๊ฐ’๊ณผ ๊ฐ™๋‹ค๋ฉด true, ๋‹ค๋ฅด๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 

 

 

์ฝ”๋“œ 48~51๋ผ์ธ์—์„œ candidate ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋งŒ j++์„ ํ•ด์ค€ ๊ฒƒ์€ erase ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ๋‹น๊ฒจ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

์ฐธ๊ณ : https://backhugger.tistory.com/45

 

[C++] ๋ฒกํ„ฐ์—์„œ std::erase๋กœ ์š”์†Œ ์‚ญ์ œ์‹œ ์ฃผ์˜์‚ฌํ•ญ

std::erase(์ดํ•˜ erase) ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๊ณ  ๊ทธ ๋’ค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‚จ์€ ์ž๋ฆฌ๋งŒํผ ์•ž์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฒกํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— erase๋ฅผ ์‚ฌ์šฉํ•  ๋• ๏ฟฝ

backhugger.tistory.com

 

 

 

 

์†Œ์Šค์ฝ”๋“œ

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// ์ˆซ์ž ์•ผ๊ตฌ
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
// n์ด ์งˆ๋ฌธ์— ๋งž๋Š” ํ›„๋ณด์ž์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜
bool isCandidate(string n, vector<int> question) {
    int strike = 0, ball = 0;
    string q_num = to_string(question[0]); // ์งˆ๋ฌธํ•œ ์„ธ ์ž๋ฆฌ์˜ ์ˆ˜
 
    for (int i = 0; i < 3; i++) {
        // ๋ณผ
        if (q_num[i] == n[0|| q_num[i] == n[1|| q_num[i] == n[2])
            ball++;
        // ์ŠคํŠธ๋ผ์ดํฌ
        if (q_num[i] == n[i]) {
            strike++;
            ball--// ์ŠคํŠธ๋ผ์ดํฌ์ผ ๊ฒฝ์šฐ ๋ณผ์ด ์•„๋‹ˆ๋ฏ€๋กœ 1์„ ๋นผ์ค€๋‹ค.
        }
    }
 
    // ์งˆ๋ฌธ์˜ ์ŠคํŠธ๋ผ์ดํฌ, ๋ณผ์˜ ์ˆ˜์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ๋ฐ˜ํ™˜
    return (strike == question[1&& ball == question[2]);
}
 
int solution(vector<vector<int>> baseball) {
    vector<string> candidate;  // ๋‹ต์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฒกํ„ฐ
    
 
    // ์ˆซ์ž ์•ผ๊ตฌ์˜ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋‹ต ๋งŒ๋“ค๊ธฐ
    for (int i = 123; i <= 987; i++) {
        string s = to_string(i);
        // 0์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ ์ œ์™ธ
        if (s[0== '0' || s[1== '0' || s[2== '0')
            continue;
        // ๊ฐ™์€ ์ˆซ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ œ์™ธ
        if (s[0== s[1|| s[0== s[2|| s[1== s[2])
            continue;
 
        candidate.push_back(s);
    }
 
    for (int i = 0; i < baseball.size(); i++) {
        for (int j = 0; j < candidate.size();) {
            // ์งˆ๋ฌธ์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” ์ •๋‹ต ํ›„๋ณด๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค
            if (!isCandidate(candidate[j], baseball[i]))
                candidate.erase(candidate.begin() + j);
            else
                j++;
        }
    }
 
    
    // ์ •๋‹ต ํ›„๋ณด์˜ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
    return candidate.size();
}
cs

 

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

 

 

 

 

 

 

 

๊ณต๋ถ€ํ•œ ๊ฒƒ์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

 

728x90