코딩테스트/SWExpertAcademy

적고 지우기 C++(SW Expert Academy)

멍토 2020. 4. 10.

난이도 : D3

문제번호 : 8821

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW37UDPKCgQDFATy&categoryId=AW37UDPKCgQDFATy&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

진수는 어린 동욱이에게 숫자 공부를 시키고 있다.

진수는 숫자를 여러 번 말한다.

그러면 동욱이는 진수가 부르는 숫자를 공책에 적거나 지운다.

숫자를 적을 때는 공책에 그 숫자가 적혀 있지 않을 때이고,

숫자를 지울 때는 공책에 그 숫자가 적혀 있을 때이다.

처음 공책에는 어떤 숫자도 적혀 있지 않다고 할 때,

마지막에 공책에 적힌 숫자의 개수를 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 ‘0’에서 ‘9’사이의 숫자로 이루어진

길이 1이상 104이하의 문자열이 주어진다.

문자열은 진수가 말하는 숫자를 순서대로 나타낸다.

출력

각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,

각 테스트 케이스 마다 마지막에 공책에 적힌 숫자의 개수를 출력한다.

예시

입력 출력

3
121
0123456789
555555

#1 1
#2 10
#3 0

2. 문제풀이

D2급 문제이다.

입력받은 문자열을 하나씩 쪼개서 판단한다.

정수형으로 바꾼뒤에 적혀있는 값을 인덱스삼아 값을 스위칭 한다.

마지막에 True 혹은 1인것만 카운팅하여 개수를 출력한다.


3. 소스코드

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
#include <iostream>
#include <string>
using namespace std;
//D3 8821 적고 지우기
 
int main() {
    int len;
    cin >> len;
    //입력받은 횟수만큼 반복
    for (int l = 1; l <= len; l++) {
        bool arr[10]{false};
        int count = 0;
        string num;
        cin >> num;
        for (int i = 0; i < num.size(); i++) {
            int temp = num[i] - '0';
            arr[temp] = !arr[temp];
        }
        for (int i = 0; i < 10; i++)
            if (arr[i])    count++;
        cout << "#" << l << " " << count << endl;
 
    }
    return 0;
}

댓글

💲 광고입니다.