일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SW Expert Academy
- c++
- algorithm
- db
- 문제풀이
- D3
- 데이터베이스
- 네트워크
- D2
- Database
- 운영체제
- 감상문
- 알고리즘
- language
- algogritim
- data structure
- BOJ
- Computer Science
- 법의학
- network
- 재테크/투자
- cs
- Programmers
- LeetCode
- swea
- 자료구조
- OS
- 독서
- 백준
- 프로그래머스
Archives
- Today
- Total
선택은 나의 것
[BOJ 백준] 13417번 카드 문자열 본문
문제
BOJ 13417 : https://www.acmicpc.net/problem/13417
13417번: 카드 문자열
입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 T가 주어진다. 각각의 테스트 케이스의 첫째 줄에 처
www.acmicpc.net
접근
알파벳이 적힌 카드가 n장이 있을 때 이 카드를 순서대로 뽑아서 내가 가진 알파벳 카드들의 왼쪽 혹은 오른쪽에 배치할 수 있다. 이렇게 배치했을 때 사전 순으로 가장 빠른 문자열을 출력해주는 문제이다. 따라서 뽑은 알파벳이 현재 내가 가진 문자열의 가장 앞의 알파벳보다 사전 순으로 빠르다면 문자열의 가장 앞에(왼쪽에), 아니라면 뒤에(오른쪽에) 배치해 주면 된다. 이런 로직을 구현하기 위해 덱(deque)을 사용하여 상황에 맞게 앞(front) 또는 뒤(back)에 문자를 넣어준 뒤 출력해 주었다.
코드
#include <iostream>
#include <deque>
using namespace std;
int main() {
int test_case, n;
deque<char> d;
cin >> test_case;
for (int t = 0; t < test_case; t++) {
char c;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> c;
if (i == 0 || d.front() < c)
d.push_back(c);
else
d.push_front(c);
}
for(int i = 0; i < d.size(); i++)
cout<<d[i];
cout << "\n";
d.clear();
}
return 0;
}
'☽ Algorithm > BOJ' 카테고리의 다른 글
[BOJ 백준] 1874번 스택 수열 (0) | 2021.12.06 |
---|---|
[BOJ 백준] 3865번 학회원 (0) | 2021.11.26 |
[BOJ 백준] 17089번 세 친구 (0) | 2021.11.24 |
[BOJ 백준] 18310번 안테나 (0) | 2021.11.22 |
[BOJ 백준] 1854번 K번째 최단경로 찾기 (0) | 2021.11.21 |
Comments