반응형

알고리즘 공부/C++ 345

백준 11023번 더하기 3 C++

리뷰istringstream을 처음으로 사용해 보았다. 좋은 기능인 것 같다. 문제 풀이getline을 통해 한줄 전체를 문자열 s에 저장해 준다.istringstream 변수 iss에 문자열 s를 저장해 준다.합계를 나타낼 sum을 0으로 초기화 하고, iss에서 값을 꺼낼 변수 val를 초기화 해준다.while루프를 돌며 iss에서 값을 val로 꺼내주고 sum에 더해준다, 더 이상 값을 꺼낼 수 없을 경우 반복문이 종료된다.sum을 출력해 준다. 참고 사항없음  정답 코드#include #include #include using namespace std;int main() { string s; getline(cin, s); istringstream iss(s); int sum = 0, val; wh..

백준 10822번 더하기 C++

리뷰getline과 stringstream, stoi를 활용한 문제 문제 풀이문자열 s를 받아오고 stringstream 형식의 변수 ss를 생성해 준다.더이상 ss를 ,로 나눌 수 없을때 까지 while루프를 실행한다.val을 정수로 바꾸고 sum에 해당 값들을 누적해서 합해준다.반복문이 종료된 후 sum에 저장된 값을 출력해 준다. 참고 사항없음  정답 코드#include #include #include using namespace std;int main() { int sum = 0; string val, s; cin >> s; stringstream ss(s); while (getline(ss, val, ',')) { sum += stoi(val); } cout

백준 10801번 카드게임 C++

리뷰총 10판의 게임에서 더 많이 이긴사람을 출력하는 문제 문제 풀이벡터 A, B에 각 줄의 숫자를 입력받아준다.각 벡터의 인덱스를 비교하여 더 높은 숫자를 제시한 플레이어의 점수를 올려준다.반복문이 종료된 후 더 높은 점수를 가진 플레이어의 이름을 출력해 준다. 참고 사항점수가 같거나 동일한 숫자의 카드를 제시했을 경우 무승부 처리해 주어야 한다.  정답 코드#include #include using namespace std;int main() { int n = 10, p1, p2; p1 = 0, p2 = 0; vector a(10); vector b(10); for (int i = 0; i > a[i]; else cin >> b[i - 10]; } while (n--) { if (a[n] == b..

백준 3049번 다각형의 대각선 C++

리뷰노가다를 통해 점화식을 세우고 오랜시간이 걸려 풀었다.. 문제 풀이101길이의 정수형 벡터를 0으로 초기화 한다.n 값을 입력 받고 정수형 변수 plus1과 plus2를 각각 1로 초기화 한다.3번 인덱스의 경우 0이 확정이므로 4부터 for문을 돌려준다.현재 값은 이전 인덱스 값에 plus2를 더해준 값이다.plus1에 현재 for문의 i에서 2를 뺀 만큼 더해준다.plus2에 plus1 만큼 더해준다.dp의 n번째 인덱스를 출력해 준다. 참고 사항n345678910dp[n]015153570126210plus10141020355684plus2013610152128엄청난 노가다로 위의 식을 도출해 냈다.문제를 풀고 나서 chatGPT에게 물어보니 식이 존재했다. 대각선이 교차하는 점의 수는 nC4였다..

백준 3059번 등장하지 않는 문자의 합 C++

리뷰string.find를 통한 문제 풀이 문제 풀이대문자 A부터 Z까지를 문자열로 갖는 변수를 초기화 해주고, 합계를 나타낼 변수 sum을 0으로 초기화 해준다.문자열을 입력 받고 26번의 반복문을 실행해 해당 문자열에 존재하지 않는 알파벳이 있을 시 아스키 코드값 만큼 더해준다.반복문의 루프가 종료된 후 sum 값을 출력해 준다. 참고 사항각 케이스 마다 sum값을 0으로 초기화 해주고 시작해야 한다.  정답 코드#include #include using namespace std;int main() { string s, abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int t, length, sum; cin >> t; while (t--) { cin >> s; sum = 0; ..

백준 2789번 유학 금지 C++

리뷰string.find 메서드를 통해 문제를 풀었다. 문제 풀이우선 금지할 문자열 변수 ban에 CAMBRIDGE로 초기화 해준다.정답을 출력할 문자열 변수 ans를 빈 문자열로 초기화 해주고, 문자열을 입력 받아 준다.문자열의 각 문자를 순회하며 해당 문자가 ban 내에 없다면 ans에 해당 문자를 출력해 준다.for문 종료 후 ans 문자열을 출력해 준다. 참고 사항string.find 함수의 반환값이 string.npos라면 string에 해당 문자열이 없다는 것이다.  정답 코드#include #include using namespace std;int main() { string ban = "CAMBRIDGE"; string a, ans = ""; cin >> a; for (int i = 0; i

백준 2495번 연속구간 C++

리뷰간단한 조건문으로 풀이가 가능한 문제 문제 풀이문자열 세개를 각각 a, b, c 변수에 입력 받고, 최대값을 나타낼 정수 0과 현재 길이를 나타낼 1을 각각 초기화 해준다.a, b, c 문자열의 현재 문자와 다음 인덱스의 문자가 같을 경우 현재 길이를 1 늘려준다.최대값과 현재 길이를 비교하여 더 큰값을 최대값으로 최신화 해준다.for문이 완료된 후 a, b, c의 최대 연속된 값을 줄바꿈을 통하여 출력해 준다. 참고 사항없음  정답 코드#include using namespace std;int main() { string a, b, c; cin >> a >> b >> c; int a_max = 0, b_max = 0, c_max = 0; int a_len = 1, b_len = 1, c_len = ..

백준 5656번 비교 연산자 C++

리뷰비교 연산자를 통한 문제 풀이 문제 풀이각 케이스마다 if문을 통해 flag에 bool값을 저장한다.기본은 false로 시작해서 참인 조건이 있을 경우 flag를 true 혹은 false로 치환하여 정답을 출력해 준다. 참고 사항삼항 연산자를 사용해 주면 출력을 한줄로 실행할 수 있다.  정답 코드#include using namespace std;int main() { int a, b, tc = 0; string op, ans; bool flag = false; while (++tc) { cin >> a >> op >> b; if (op == "E") break; if (op == ">") flag = a > b; if (op == ">=") flag = a >= b; if (op == "

백준 2702번 초6 수학 C++

리뷰파이썬처럼 모듈을 사용하는 방법을 몰라 브루트포스 알고리즘으로 풀었다. 문제 풀이시작이 될 숫자는 모두 a, b중 큰 값에서 부터 시작해서 각 while루프를 돌아준다.최소공배수는 현재 숫자를 a로 나눈 나머지와 b로 나눈 나머지가 모두 0일 경우 break최대공배수는 a를 현재 숫자로 나눈 나머지와 b를 현재 숫자로 나눈 나머지가 모두 0일 경우 breakbreak가 되지 않는 경우는 없다, 테스트 케이스마다 각각 값을 출력해 준다. 참고 사항없음  정답 코드#include #include #include using namespace std;int main() { int t, a, b, temp1, temp2; cin >> t; while (t--) { cin >> a >> b; temp1 = ..

백준 5586번 JOI와 IOI C++

리뷰문자열 find를 통해 문제를 풀었다. 문제 풀이문자열을 받아오고 joi와 ioi의 개수를 카운트할 정수 변수를 0으로 초기화 해준다.먼저 문자열에서 JOI가 위치한 인덱스를 pos변수에 저장하고 만약 pos가 문자열의 끝이 아니라면 while루프를 시작하여 joi개수를 증가시키고 다음 joi위치를 pos 변수에 최신화 해준다.IOI 역시 JOI와 마찬가지로 최신화 해준 뒤 while루프를 돈다.JOI의 개수와 IOI개수를 출력해 준다. 참고 사항없음  정답 코드#include #include using namespace std;int main() { string s; cin >> s; int joi = 0, ioi = 0; int pos = s.find("JOI"); while (pos != s.n..

728x90
반응형