프로그래머스 - 두 수의 합 - 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

Antimatter Blues - Edward Ashton

미키 7의 속편, Antimatter Blues가 따끈따끈하게 출판되었다. ‘미키 7’은 봉준호 감독님이 영화화한다고 밝혔던 작품이고, 실제로 내용도 재미있었는데, 속편이 나온다니 잔뜩 기대하고 있었다. 번역본이 나오기까지 기다리다가는 흥이 다 깨질 것 같아서 그냥 원서로 구입해서 읽었다. (분명 7월말에 amazon에서 구입할 때에는 21불 주고 읽었는데, 지금은 3불로 할인판매한다ㅜㅜ 타이밍은 아쉽지만 일찍 읽었으니까 아쉽진 않다!) ‘1편: 미키 7’의 경우 세계관에 대해 설명하는데 많은 분량을 할애했는데, ‘2편: Antimatter Blues’은 인물관계나 배경을 이미 숙지하고 있다고 전제한 상태에서 이야기가 진행되니까 상대적으로 전개도 빠르고 인물들의 마음속을 깊게 들여다볼 수 있었다. 1편에서는 creeper들의 정체가 제대로 드러나지 않고 그냥 ‘unknown’으로 남았는데, 2편에서는 실제로 외계 생명체들과 상호소통하는 내용들을 담고 있어서 재미있게 볼 수 있다. mandibles을 가진 커다란 creeper의 모습이 실제로 어떨지 궁금하다. 통통한 거미같은 느낌인지 아니면 개미에 가까운 모습일지? 봉준호 감독님이 어떻게 그들을 표현할지 궁금하다. ...

2023-8-12 · 2 min · 341 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