2018년 8월 2일 목요일

백준 8958: OX퀴즈 풀이

문제 링크
https://www.acmicpc.net/problem/8958


string, cout, cin 등을 사용하고 있는데, 채점시 메모리나 속도 문제를 따지자면string 변수 타입을 쓰지 않고, cin, cout도 쓰지 않는게 더 잘 나온다.


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
#include <iostream>
#include <string> 
using namespace std;
/*
    "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
    "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
    
    입력: 첫째 줄 테스트 케이스 수
    테스트 케이스 수만큼의 테스트 케이스 문자열이 입력된다.
    
    출력: 각 테스트 케이스마다의 점수를 출력한다
    
    입력이 대문자로만 오는지 소문자로만 오는지 정확하지 않아서 대문자 변경 처리를 추가했다.
*/
int main() 
{
    int inputTestCaseNum = 0;
    cin >> inputTestCaseNum;
    
    // input Test case
    string *pTcArray = new string[inputTestCaseNum];
    for(int loopCount = 0; loopCount < inputTestCaseNum; loopCount++)
    {
        cin >> pTcArray[loopCount];
        
        // 다 대문자로 변경.
        for(auto & c : pTcArray[loopCount])
            c = toupper(c);
    }
    
    // calculate score for each test case.
    for(int loopCount =0; loopCount < inputTestCaseNum; loopCount++)
    {
        int score     = 0;
        int sequence  = 0;
        for(int strLoop = 0; strLoop < pTcArray[loopCount].length(); strLoop++)
        {
            if('O' == pTcArray[loopCount].at(strLoop))
            {
                sequence++;
                score += sequence;
            }
            else
            {
                sequence = 0;
            }
        }
        cout << score << endl;
    }
    
    delete[] pTcArray;
    return 0;
}
cs
메모리 동적할당하는게 싫어서 벡터로 만든 경우

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
#include <iostream>
#include <string> 
#include <vector>
using namespace std;
 
/*
    "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
    "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
    
    입력: 첫째 줄 테스트 케이스 수
    테스트 케이스 수만큼의 테스트 케이스 문자열이 입력된다.
    
    출력: 각 테스트 케이스마다의 점수를 출력한다
*/
 
int main() 
{
    int inputTestCaseNum = 0;
    cin >> inputTestCaseNum;
    
    // input Test case
    vector<string> vString(inputTestCaseNum);
    
    // calculate score for each test case.
    for(int loopCount =0; loopCount < inputTestCaseNum; loopCount++)
    {
        cin >> vString[loopCount];
        
        int score     = 0;
        int sequence  = 0;
        for(int strLoop = 0; strLoop < vString[loopCount].length(); strLoop++)
        {
            if('O' == vString[loopCount].at(strLoop))
            {
                sequence++;
                score += sequence;
            }
            else
            {
                sequence = 0;
            }
        }
        cout << score << endl;
    }
    
    return 0;
}
cs

댓글 없음:

댓글 쓰기

A*, JPS 길찾기 알고리즘 시뮬레이션 사이트

https://qiao.github.io/PathFinding.js/visual/ 길 찾기 알고리즘 시행 과정을 보여주는 사이트다. 링크 메모..