프로그래머스 - 주사위 게임 2 - C++

프로그래머스 주사위 게임 2 문제 바로가기 일일히 조건 나눠가며 풀기 C++에서는 AND 연산자를 &&로, OR 연산자를 ||로 표현할 수 있다. 이를 이용해서 일일히 조건을 나누면 문제를 해결할 수 있다. #include <string> #include <vector> #include <cmath> using namespace std; int solution(int a, int b, int c) { if (a == b && b == c){ return (a+b+c)*(pow(a,2)+pow(b,2)+pow(c,2))*(pow(a,3)+pow(b,3)+pow(c,3)); } else if (a==b || b==c || c==a){ return (a+b+c)*(pow(a,2)+pow(b,2)+pow(c,2)); } else{ return a+b+c; } } std::set 그러나 조건이 복잡해진다면 코드가 복잡해질 염려가 있어서 간편한 방법이 필요하다. 이 경우 set을 이용하면 간단하게 해결 가능하다. set은 중복되는 요소가 없기 때문에 arr.size()을 통해서 몇 개의 숫자가 동일한지 역추적할 수 있게 된다. include <set>으로 헤더를 불러오고 set<int> s{a,b,c};로 선언(declare)한 뒤에 사용하면 된다. ...

2023-8-9 · 1 min · 193 words · Junha

프로그래머스 - 주사위 게임 3 - C++

프로그래머스 주사위 게임 3 문제 바로가기 구현하는게 은근히 까다로웠던 문제… python이라면 Counter 라이브러리를 불러와서 바로 풀었을 텐데, C++은 그런 라이브러리가 존재하지 않아 한땀한땀 구현해야하는게 필요하다. 물론 자체 제작 counter을 만들면 되긴 하지만! vector로 숫자를 받고 오름차순으로 sort해준 뒤에 나머지 작업을 진행했다. 가독성을 높이기 위해서 switch구문을 활용해서 숫자의 종류의 수에 따라 case을 나누어 풀어주었다. #include <string> #include <vector> #include <algorithm> #include <cmath> #include <set> using namespace std; int solution(int a, int b, int c, int d) { vector<int> nums{a,b,c,d}; set<int> counts{a,b,c,d}; sort(nums.begin(), nums.end()); switch (counts.size()){ case 1: return 1111*nums[0]; case 2: if (nums[1] != nums[2]){ return (nums[3]+nums[0]) * (nums[3]-nums[0]); } else{ if (nums[0] == nums[1]){ return pow((10 * nums[0] + nums[3]), 2); } else{ return pow((10 * nums[3] + nums[0]), 2); } } case 3: if (nums[0] == nums[1]){return nums[2]*nums[3];} if (nums[0] == nums[2]){return nums[1]*nums[3];} if (nums[0] == nums[3]){return nums[1]*nums[2];} if (nums[1] == nums[2]){return nums[0]*nums[3];} if (nums[1] == nums[3]){return nums[0]*nums[2];} if (nums[2] == nums[3]){return nums[0]*nums[1];} case 4: return nums[0]; } }

2023-8-9 · 1 min · 160 words · Junha

프로그래머스 - 더 크게 합치기 - C++

프로그래머스 더 크게 합치기 문제 바로가기 프로그래머스에서는 초보자나 새로운 프로그래밍 언어에 적응할 수 있도록 코딩 기초 트레이닝 문제들을 제공한다. 150여개의 문제들이 있는데 기초 문법을 익힌 뒤에 체화하는 과정에서 써먹으면 좋을 것 같다. 추천 문제들을 모두 풀어내면 머쓱이 스탬프도 제공하니 일종의 동기부여(?)도 된다. ㅋㅋ C++ 기본 문법을 익힌 뒤에 수학 익힘책을 풀 듯이 차례차례 풀어보고 있다. string int 변환 C++에서는 int -> string 그리고 string -> int 변환을 어떻게 하나 모르겠어서 구글링을 했다. <string> header에는 string과 관련된 여러 유용한 함수가 많은데, 오늘은 to_string()과 stoi()을 사용했다. 이름도 직관적인데 to_string()은 말 그대로 string으로 바꿔주고, stoi()는 string-to-int을 줄인 것으로 생각하면 된다. int, float, double에 관계없이 string으로 쉽게 바꿀 수 있는 반면, 그 역은 따져주어야하기 때문에 stoi() stof() 등등으로 나누어준 것 같다. ...

2023-8-8 · 1 min · 172 words · Junha

프로그래머스 - 코드 처리하기 - C++

프로그래머스 코드 처리하기 문제 바로가기 이상하게 자꾸만 에러가 등장해서 풀이에 왜 걸렸던 문제… 해결법은 따옴표에 있었다. char의 경우 작은 따옴표'로 감싸주어야 하는데 (c == "1")와 같이 큰따옴표로 감싸는 바람에 자꾸만 에러가 발생했다. 아무리 고쳐도 문제 해결이 안되었는데 디버깅이 더 어려운거같다 ㅜㅜㅋㅋ 항상 따옴표에 유의하자!! (세미콜론은 물론이고) 구현하는 과정은 간단했다. index에 따라서 for문을 돌려서 code[idx]로 탐색해도 되지만, 코드의 간결성을 위해 for (char c: code){}로 해결했다. 내 풀이 #include <string> #include <vector> using namespace std; string solution(string code) { string ret = ""; int mode = 0; int idx = 0; for (char c: code){ if (mode == 0){ if (c == '1'){ mode = 1; } else if (idx%2 == 0){ ret += c; } } else{ if (c == '1'){ mode = 0; } else if (idx%2 == 1){ ret += c; } } idx++; } if (ret == ""){ return "EMPTY"; } else{ return ret; } }

2023-8-8 · 1 min · 148 words · Junha

프로그래머스 - 홀짝에 따라 다른 값 반환하기 - C++

프로그래머스 홀짝에 따라 다른 값 반환하기 문제 바로가기 header 숫자를 다루는 함수들은 <cmath> header에 담겨있다. 이번 문제에서는 제곱하는 함수가 필요했다. 물론 i*i 처럼 구현해도 되긴 하지만, 응용을 위해서 함수를 찾아보았다. pow()함수는 double pow (double base, double exponent);로 정의되는데, double 밑(base)과 double 지수(exponent)을 입력으로 받아 double 값을 출력한다. 내 풀이 if 문으로 홀짝을 나누고 각각에 맞게 구현해주면 끝이다. #include <string> #include <vector> #include <cmath> using namespace std; int solution(int n) { int answer = 0; if (n%2 == 1){ for (int i = 0; i<n/2+1; i++){ answer += 2*i+1; } } else { for (int i=0; i<n/2+1; i++){ answer += pow(2*i, 2); } } return answer; } References cmath header reference

2023-8-8 · 1 min · 110 words · Junha