프로그래머스 - 두 수의 합 - C++ Python

프로그래머스 두 수의 합 문제 바로가기 Python이나 Java의 경우 이 문제는 매우 쉽다. 숫자의 크기가 매우 커도 처리할 수 있기 때문에… def solution(a, b): return str(int(a) + int(b)) 하지만 C++의 경우 long long 8byte가 최대다. 더 확장하고 싶으면 BigInteger을 직접 구현해야하는데, 문제 푸는데 언제 다 구현하고 앉아있어…!! 이 문제의 경우 숫자의 길이가 최대 100,000자리이기 때문에 일반적인 연산으로는 계산이 불가하다. 그래서 마치 우리가 세로셈으로 손계산하듯이 (초등학교 세자리수 덧셈마냥) 올림을 고려하면서 한 자리씩 계산하도록 구현했다. 내 풀이 #include <string> #include <vector> #include <algorithm> using namespace std; string solution(string a, string b) { string ans = ""; reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); if (a.size() < b.size()){ a.resize(b.size(), '0'); } else { b.resize(a.size(), '0'); } // a[i] + b[i] = 10*p + q int p = 0; for (int i=0; i<a.size(); i++){ int cur = (a[i] - '0') + (b[i] - '0') + p; ans += to_string(cur%10); p = cur/10; } if (p != 0){ ans += to_string(p); } reverse (ans.begin(), ans.end()); return ans; } 일의 자리에서부터 계산하기 위해서 reverse() 함수를 사용해서 뒤집어주고 차례대로 연산해 나간다. 이때 올림이 있는 경우를 대비해서 p(10으로 나눈 몫)에 저장해두고 다음 연산 때 꺼내서 사용한다. ...

2023-8-14 · 1 min · 185 words · Junha

프로그래머스 - 문자열 묶기 - C++

프로그래머스 문자열 묶기 문제 바로가기 내 풀이 #include <string> #include <vector> #include <algorithm> using namespace std; int solution(vector<string> strArr) { int max_len = 0; vector<int> strlen(30); for (string s: strArr){ strlen[s.size()-1] += 1; } for (int i: strlen){ max_len = max(i, max_len); } return max_len; } vector을 초기화하는 방법 #include <vector> vector<int> vec(5); // {0,0,0,0,0} vector<int> vec2(5, 3); // {3,3,3,3,3} 위 처럼 vector의 기본값을 지정하여 초기화할 수 있다. for문을 사용하지 않고 간단하게 초기화하는 방법을 활용하자! vector<int>로 declare한 뒤에 그 변수명 뒤에 괄호 안에 (크기, 초깃값)을 지정하면 된다. 초깃값을 전달하지 않으면 기본값인 0으로 초기화된다. vector에서 최댓값 구하기 for문으로 일일히 비교하기 #include <algorithm> // 중간 생략 int ans = 0; for (int i: vec){ ans = max(ans, i); } max_element 활용하기 #include <algorithm> // 중간 생략 int ans; ans = *max_element(vec.begin(), vec.end()); 이 방법이 매우 편리하다고 생각했다. (근데 그냥 max()안에 arr을 전달하면 되는 python에 비해서는 귀찮긴 하다…) max_element()는 iterator을 return하며, *max_element()는 최댓값의 실제 값을 return한다. ...

2023-8-14 · 1 min · 153 words · Junha

프로그래머스 - A 강조하기 - C++

프로그래머스 A 강조하기 문제 바로가기 ASCII 아스키 코드를 이용한 풀이 아스키 코드를 이용하면 string에서 각 문자열이 어떤지를 쉽게 나눌 수 있다. ASCII 표에 대한 정보는 References 참조! #include <string> #include <vector> using namespace std; string solution(string myString) { string answer = myString; for (int i=0; i<answer.size(); i++){ if (answer[i] - 0 == 97){ answer[i] -= 32; } if (66 <= answer[i] && answer[i] <= 90){ answer[i] += 32; } } return answer; } cctype을 이용한 풀이 cctype header에서는 여러 기능들을 제공하는데, 자주 사용하는 것은 islower() isupper() tolower() toupper()가 있다. 이것을 이용하면 쉽게 대소문자를 판별할 수 있다. #include <string> #include <vector> using namespace std; string solution(string myString) { string answer = ""; for(char ch : myString) { if(ch == 'A' || ch == 'a') answer += 'A'; else answer += tolower(ch); } return answer; } 출처 ...

2023-8-12 · 1 min · 140 words · Junha

프로그래머스 - 공백으로 구분하기 1 - C++

프로그래머스 공백으로 구분하기 1 문제 바로가기 엥 C++는 split이 없다고?! Java나 Python에는 분명히 split()가 있었는데, C++은 없다(…) 왜지? 굳이 필요 없다고 느낀건가? 해결법은 정규표현식(regex)을 이용하거나 아니면 stringstream을 이용하는 것! 개인적으로 iostream을 확장한 sstream이 더 직관적으로 이해가 잘 되어서 이쪽을 선호한다. 예를 들어보자. 사용자가 input으로 2 3 5을 입력한다고 해보자. 이를 a b c 변수에 담기 위해서는 다음과 같이 코드를 작성할 수 있다. #include <iostream> using namespace std; cin >> a >> b >> c; cout << "a: " << a << "b: " << b << "c: " << c; sstream은 iostream의 작동 방식과 매우 유사하다. sstream을 선언하고 string을 제공하면 띄어쓰기에 따라서 구분해서 변수를 계속해서 담아주는 역할을 한다고 볼 수 있다. ...

2023-8-12 · 1 min · 199 words · Junha

프로그래머스 - 특정한 문자를 대문자로 바꾸기 - C++

프로그래머스 특정한 문자를 대문자로 바꾸기 문제 바로가기 alp를 char로 바꾸어서 풀어내기 solution에 input으로 alp가 하필… string으로 들어와서 이걸 어떻게 처리해야할지 고민을 정말 많이 했다. 해결법은 정말 단순했는데, alp을 배열로 생각하고 alp[0] 또는 alp.at(0)을 사용하면 char로 불러와진다는 점이었다. 허허 #include <string> #include <vector> using namespace std; string solution(string my_string, string alp) { string answer = ""; char calp = alp.at(0); for (char ch: my_string){ if (ch == calp){ answer += toupper(ch); } else{ answer += ch; } } return answer; } substr()을 이용한 풀이 substr() 함수는 2개의 parameters을 받는다. pos는 첫 번째 character의 위치, count는 비교 대상인 substring의 길이. 따라서 이 경우 my_string의 각 자리와 alp의 길이인 1을 parameter로 전달해주면 된다. ...

2023-8-12 · 1 min · 145 words · Junha