분류 전체보기 206

[C++][백준 1138] 한 줄로 서기

https://www.acmicpc.net/problem/1138풀이키가 1인 사람부터 시작한다면 이후에 오는 사람들은 전부 본인보다 큰 사람들일 것이기 때문에 주어진 수(자기보다 키가 큰 사람이 왼쪽에 몇 명 있었는지)만큼 왼쪽이 비어 있어야 한다 주어진 수만큼 왼쪽을 비운 다음에 본인이 들어가면 되는데, 이미 앞서 들어간 사람이 있는 경우 들어갈 자리가 있을 때까지 오른쪽으로 이동한다(오른쪽으로 계속 이동해도 본인보다 앞서 들어간 사람은 전부 본인보다 작으므로 상관없다) 제출 코드#include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n..

[C++][백준 1913] 달팽이

https://www.acmicpc.net/problem/1913풀이실제로 사람이 채워나가듯 빙글빙글 돌며 2차원 배열을 채운다.직접 해당 그림을 그려보다 발견한 규칙들이다가장 큰 수(n^2)부터 시작해서 하나씩 수를 줄여나가며 채워나간다고 했을 때1. 채워나가는 순서는 아래쪽, 오른쪽, 위쪽, 왼쪽 순으로 반복된다2. (처음을 제외하고) 방향이 바뀌기까지의 수가 방향이 두 번 바뀔 때마다 1씩 줄어든다 위 규칙을 이용해 코드를 작성하였다(문제에서 n은 홀수라고 나와있었기 때문에 홀/짝수에 따라 초기값을 다르게 세팅할 필요가 없었다) 1. n * n 부터 시작해서 row 0, col 0의 위치에서부터 아래방향으로 채워나간다2. 하나씩 채울 때마다 count를 세 주다가, 방향이 바뀌어야 하는 시점에 도달..

[C++][백준 9017] 크로스 컨트리

https://www.acmicpc.net/problem/9017풀이문제를 잘못 이해해서 엄청나게 삽질했던 문제...1. 선수가 6명이 되지 않으면 점수를 받지 않는다. 2. 1~4등까지의 점수 합으로 우승팀을 구한다. 만약 점수합이 같다면 5등의 점수가 더 적은 팀이 우승한다.위 두 조건을 잘 챙겨서 작성해 주면 된다제출 코드#include using namespace std;int arr[1001];int teamMem[201];int teamScr[201];int teamCnt[201];int fifthPlayer[201];int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t, n; cin >> t..

[C++][백준 10709] 기상캐스터

https://www.acmicpc.net/problem/10709 풀이만약 각 구역의 문자가 'c'라면 0을 출력하고, 구름이 출발했다는 의미로 구름이 지나온 시간을 0으로 설정한다만약 각 구역의 문자가 '.'인데 구름이 지나온 시간이 0보다 작다면 구름이 출발하지 않았다는 의미이므로 -1을 출력한다각 구역의 문자가 '.'인데 구름이 지나온 시간이 0 이상이라면 지나온 시간을 출력한다 위와 같이 세 케이스로 나누어 코드를 작성하였다 제출 코드#include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int h, w; string input; cin >> h >>..

[C++][백준 20546] 기적의 매매법

https://www.acmicpc.net/problem/20546 풀이flag 변수를 두어 가격이 전일 대비 하락/상승한 연속 일자를 기록할 수 있도록 하였다 제출 코드#include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int j[2] = {}; int s[2] = {}; int cash; cin >> cash; j[0] = cash; s[0] = cash; int flag = 0; int prev; int stock; for (int i = 0; i > stock; j[1] += j[0] / stock;..

[C++][백준 9935] 문자열 폭발

https://www.acmicpc.net/problem/9935풀이입력받은 문자열을 char 단위로 응답할 새로운 문자열에 추가시켜준다만약 폭발 문자열의 마지막 문자를 추가했다면, 해당 문자열의 앞부분을 확인해서 폭발 문자열이 존재할 경우 없애준다 제출 코드#include #include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); string str, explode, res = ""; cin >> str >> explode; int len = explode.length(); char lastChar = explode.back(); for (int i ..

[C++][백준 20437] 문자열 게임 2

https://www.acmicpc.net/problem/20437풀이각 알파벳(a~z)이 등장하는 위치를 저장해두고,k개씩 묶어서 min값과 max값을 비교하여 갱신한다 만약 위치가 저장된 벡터의 사이즈(저장된 개수)가 k보다 작으면 그냥 넘긴다이때, 모든 알파벳들이 전부 k보다 작으면 "-1"을 출력하기 위해 bool 타입 변수를 두어 이를 체크한다 각 알파벳마다 위치가 저장된 vector에서 길이 k의 윈도우를 한 칸씩 오른쪽으로 이동시켜가며 최대 최소값을 구해준다위와 같은 방식이다 제출 코드#include #include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); i..

[C++][백준 1522] 문자열 교환

https://www.acmicpc.net/problem/1522풀이직접 교환을 진행하는 것보단 최소 횟수로 교환이 진행된 문자열과 비교를 통해 총 몇 번 교환해야 하는지를 알아내는 방식이 나을 것 같았다(풀고 나서 알았지만 이와 같은 방식을 슬라이딩 윈도우 알고리즘이라고 한다) 입력받은 문자열에서 a만 남긴 문자열을 만들어주고, 해당 문자열을 오른쪽으로 한 칸씩 이동시켜가며 입력받은 문자열과 일대일로 비교하며 다를 경우 count를 올려준다 문자열의 끝은 서로 연결되어 있다고 가정하기 때문에 만약 문자열의 길이를 넘어간 인덱스에 접근할 차례면 앞으로 보내준다이런 식으로 한 칸씩 이동해 가면서 요소들을 비교하는 식으로 진행하였다오른쪽으로 계속 이동하다 문자열의 길이를 넘어가는 경우 위와 같이 비교한다 최..

[C++][백준 20291] 파일 정리

https://www.acmicpc.net/problem/20291 제출 코드#include #include #include using namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; map m; while(n--) { string str; cin >> str; m[str.substr(str.find('.') + 1)]++; } for (auto res : m) cout C++에서 문자열을 특정 기준으로 나눌 때 substr(시작 위치, 길이) 함수를 사용할 수 있다* 길이: 시..