백준 5430하고싶은거/알고리즘 문제풀이2024. 3. 28. 12:12
Table of Contents
과정
- 지금껏 풀었던 문제와 다르게 문자열형식으로 받아서 그 중 정수만을 빼내야할 것 같았다.
여기서부터 해결하기로 했다. - R과 D의 함수자체는 어렵지 않은데, 테스트케이스와 배열의 크기가 커서 타임오버가 걸리지 않을까 걱정했다.
- 처음 시도는 리스트로 테스트케이스를 굴렸다. 왜냐하면,
1. 함수 R을 할 때 노드 화살표만 바꿔주면 될거 같아서
2. 함수 D를 할 때 벡터로하면 인덱스 정렬을 다시 해줘야할거 같아서 - 근데 의문이 들었다. 일단 저 코드처럼 R이 나올 때 마다 꼭 뒤집어져야하는가? 그냥 뒤집었는지 아닌지만 알고 있어도 되지않나, 그리고 이게 해결되니까 D가 나와도 멀쩡하면 [0]삭제, 뒤집어지면 [n-1]삭제 하면 되서 배열로 구현했다.
코드
#include <iostream>
#include <cstring>
using namespace std;
char p[100001]; // RDRDDR 같은 함수들의 문자열
int lst[100000], lstSize; // 숫자가 들어있는 배열
void solve(void)
{
bool reverse = false;
int lstHead = 0, lstTail = 0, total, printCnt = 0;
for (int i = 0; i < strlen(p); i++)
{
if (p[i] == 'D')
{
if (reverse)
lstTail++;
else
lstHead++;
}
else
{
if (reverse)
reverse = false;
else
reverse = true;
}
}
total = lstSize - (lstHead + lstTail);
if (total < 0)
{
cout << "error\n";
return;
}
cout << '[';
if (reverse) // 뒤집어진 경우
{
for (int i = lstSize - lstTail - 1; i >= lstHead; i--)
{
cout << lst[i]; printCnt++;
if (printCnt != total)
cout << ',';
}
}
else //정상인경우
{
for (int i = lstHead; i < lstSize - lstTail; i++)
{
cout << lst[i]; printCnt++;
if (printCnt != total) cout << ',';
}
}
cout << "]\n";
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
int t = 0; // 테스트게이스 개수
int n = 0; // 배열에 들어있는 수의 개수
char temp;
cin >> t;
for (int k = 0; k < t; k++)
{
lstSize = 0;
cin >> p >> n;
for (int i = 0; i < n; i++)
{
cin >> temp >> lst[i];
lstSize++;
}
cin >> temp;
if (n == 0)
cin >> temp;
solve();
}
return 0;
}
가장 많이 오류가 났던 부분은
이런식의 입력을 받을 때, 내가 원하는 부분은 1234 정수 부분인데 []와 ,을 어떻게 입력을 받을것인가 였다.
쓰레기값을 담을 char temp에 넣어서 구현했고, 추가적으로 string은 안쓰는게 좋다. 약간 char은 그냥 단어하나, string은 배열 느낌인데, temp를 쓰는 목적은 단순히 입력을 받아주기 위함이지, 입력받은 문자로 뭘 할게 아니기때문이다.
그리고, 배열을 R이 나올 때마다 뒤집지 않고, D를 해야 할 경우 R의 여부에 따라 인덱스 0쪽을 삭제하는지, 인덱스 마지막을 삭제하는지 결정하는게 핵심이었다.
'하고싶은거 > 알고리즘 문제풀이' 카테고리의 다른 글
백준 11724 (DFS) (0) | 2024.03.30 |
---|---|
백준 7569 (BFS) (0) | 2024.03.30 |
백준 2606 (DFS) (1) | 2024.03.26 |
백준 2579 (DP) (1) | 2024.03.24 |
백준 1463 (점화식) (1) | 2024.03.23 |
@ssIIIn :: 두 번째 저장공간
#개발 #게임 #일상
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!