다른 사람들의 코드를 보면서 얻은게 많았던 문제
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int T;
scanf("%d ", &T);
vector<string> result;
char temp;
int leftCnt = 0, rightCnt = 0;
for (int i = 0; i < T; )
{
temp = getchar();
if (temp == '(') ++leftCnt;
else if (temp == ')') ++rightCnt;
if (leftCnt < rightCnt)
{
string line;
getline(std::cin, line);
result.push_back("NO");
leftCnt = 0;
rightCnt = 0;
++i;
}
else if (temp == '\n')
{
if (leftCnt == rightCnt)
result.push_back("YES");
else
result.push_back("NO");
leftCnt = 0;
rightCnt = 0;
++i;
}
}
for (const auto & data : result)
{
cout << data<<'\n';
}
return 0;
}
밑은 감명받은 코드ㅋㅋ
더보기
#include<cstdio>
int n;
char s[51];
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", s);
int c = 0;
for (int j = 0; s[j] && c >= 0; j++) s[j] == '(' ? c++ : c--;
puts(c ? "NO" : "YES");
}
return 0;
}
||풀면서 느낀 것
- 무조건 설계를 잘 세워두자
설계하다가 아 이거 코드로 바로 풀 수 있겠다 라는 생각이 들어서 중간에 코드쓰면서 나머지를 생각했는데
전혀 아니였다 ^~^
깝치지 말고 끝까지 꼼꼼하게 설계를 해두자
||새로 알게 된것
- 문자열의 끝이 반복문의 종료 조건이 될 수 있다
문자열의 끝은 Null, 즉 0이라 당연히 조건이 될 수 있는데
이렇게 응용 할 생각을 못했어서 이번에 다른 사람들의 코드를 보면서 깨달았다.
char test[50];
//for문에 적용
for(int i = 0; test[i]; ++i) { }
//while문에 적용
int i = 0;
while(test[i]) {}
보다 쉽게 문자열의 끝까지 반복문을 돌릴 수 있게 되었다! 정말 개꿀
- stl의 Stack이 비었을 때 pop이나 top을 사용하면 에러가 난다
이건 그냥 질문게시판을 보다가 알아두면 좋을것 같아서 적어본다.
- scanf에서 %s뒤에 공백문자를 넣으면 화이트스페이스가 비워진다.
이건 항상 이렇게 하면 비워지지 않을까? 생각했던건데
이번에 실험해보면서 잘 작동 되는걸 확인했다.
char test[50];
scanf("%s ",test); //%s뒤에 공백이 있다는게 중요
puts(test);
scanf("%s",test);
puts(test);
//input
AA BB
//output
AA
BB
- 백준 관련
이번에 여러가지 해보면서 확실해졌는데
- 모든 input이 끝나지 않아도 중간 중간 output이 정답대로 나와도 정답처리가 된다.
- rewind, fflush는 백준에서 지양하더라
'코딩 테스트 > 알고리즘 풀이' 카테고리의 다른 글
[백준 - 1260] DFS와 BFS (0) | 2022.08.02 |
---|---|
[백준 - 1202] 보석 도둑 (0) | 2022.08.01 |
[백준 - 9093] 단어 뒤집기 (0) | 2022.07.31 |
[백준 - 1080] 행렬 (0) | 2022.07.30 |
[백준 - 1715] 카드 정렬하기 (0) | 2022.07.28 |