기술 블로그

16459번 독서의 계절 본문

알고리즘 문제/BOJ

16459번 독서의 계절

parkit 2018. 11. 26. 09:17
728x90
반응형

제 5회 한양대학교 프로그래밍 경시대회 Open Contest - Advanced Div. A번 문제


https://www.acmicpc.net/problem/16459


문자열 처리 문제이다.


개인적으로 C++보다는 JAVA가 문자열 처리에 있어서 더 편한 것 같다.



주의할 점

1. C++에는 자체적인 JAVA의 replaceAll 메소드가 없다.

2. C++의 replace 메소드는 문자열 처음부터 찾아가서 바꾸고 싶은 단어를 바꾸는데 한 번 만 실행된다.

따라서, find와 while 문을 통해 계속 바꿔줘야 한다.

예)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
#include <vector>
#include <cstring>
#include <string>
#include <math.h>
#include <algorithm>
#include <map>
 
using namespace std;
 
int main(void)
{
    string s;
 
    s = "one two three two one";
 
    s.replace(s.find("two"), 3"TEST");
 
    cout << s << '\n';
    
    return 0;
}
cs



위의 코드를 실행하면, 아래와 같이 출력된다.


one TEST three two one






<C++>

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <cstring>
#include <string>
#include <math.h>
#include <algorithm>
#include <map>
 
using namespace std;
 
int main(void)
{
    vector<string> v;
 
    string Who;
    string Where;
    string What;
 
    string input;
 
    int index = 0;
 
    while (1)
    {
        getline(cin, input);
 
        if (input[0== '0'break;    
 
        v.push_back(input);
    }
 
    getline(cin, Who); // WHO
    getline(cin, Where); // WHERE
    getline(cin, What); // WHAT
 
    for (auto s : v)
    {    
        while (1)
        {
            bool isChanged = false;
 
            // WHO
            while (s.find("WHO"< s.length())
            {
                s.replace(s.find("WHO"), 3, Who);
 
                isChanged = true;
            }
 
            // WHERE
            while (s.find("WHERE"< s.length())
            {
                s.replace(s.find("WHERE"), 5, Where);
 
                isChanged = true;
            }
 
            // WHAT
            while (s.find("WHAT"< s.length())
            {
                s.replace(s.find("WHAT"), 4, What);
 
                isChanged = true;
            }
 
            if (!isChanged) break;
        }
 
        cout << s << '\n';
    }
    
    return 0;
}
cs







<JAVA>

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
import java.util.*;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Scanner scan = new Scanner(System.in);
        
        Vector<String> v = new Vector<String>();
        
        while(true)
        {
            String input = scan.nextLine();
            
            if(input.equals("0")) break;
            
            v.add(input);
        }
        
        String Who = scan.nextLine();
        String Where = scan.nextLine();
        String What = scan.nextLine();
        
        Where = Where.replaceAll("WHO", Who);
        What = What.replaceAll("WHO", Who);
        What = What.replaceAll("WHERE", Where);
        
        for(String i : v)
        {
            i = i.replaceAll("WHO", Who);
            i = i.replaceAll("WHERE", Where);
            i = i.replaceAll("WHAT", What);
            
            System.out.println(i);
        }
        
        scan.close();
    }
}
 
cs






















728x90
반응형

'알고리즘 문제 > BOJ' 카테고리의 다른 글

16471번 작은 숫자 내기  (0) 2018.11.26
15740번 A+B - 9  (2) 2018.11.26
16562번 친구비  (0) 2018.11.24
16561번 3의 배수  (0) 2018.11.24
16507번 어두운 건 무서워  (0) 2018.11.23