```
백준 1864번 문어숫자 C++로 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 1864번 풀이
https://www.acmicpc.net/problem/1864
백준 1864번 문어숫자는
난이도 쉬움 등급의 문제로서
각 열에 문자열이 주어질때
-는 0
\는 1
(는 2
@는 3
?는 4
>는 5
&는 6
%는 7
/는 -1
으로 바꿔주고 각 자리수에 8에 자릿수에 승수를 해서 곱해준 수의 합을 출력해줍니다.
#이면 종료합니다.
예를 들어
?/-- 이 입력된다면 (4 * (8 ^ 3)) + (-1 * (8 ^ 2)) + (0 * (8 ^ 1)) + (8 * (8 ^ 0)) = 1984 입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
한줄에 #이 나올때까지 while문으로 반복해서 입력을 받고
void Communicate()
{
while (true)
{
std::string inputStr;
std::getline(std::cin, inputStr);
if (inputStr == "#")
{
break;
}
else
{
printTranslation(inputStr);
}
}
}
케이스문을 돌려서 그에 해당하는 문자열에 따라서 숫자로 변환해주고
스택에 넣어서
하나씩 뽑아서
8에 승수를 곱해서 더해서
답을 출력했습니다.
void printTranslation(const std::string str)
{
std::stack<long long>OctStack;
std::stringstream ss(str);
for (auto i = 0; i < str.length(); i++)
{
char tempChar;
ss >> tempChar;
int tempNum;
switch (tempChar)
{
case '-':
{
tempNum = 0;
break;
}
case '\\':
{
tempNum = 1;
break;
}
case '(':
{
tempNum = 2;
break;
}
case '@':
{
tempNum = 3;
break;
}
case '?':
{
tempNum = 4;
break;
}
case '>':
{
tempNum = 5;
break;
}
case '&':
{
tempNum = 6;
break;
}
case '%':
{
tempNum = 7;
break;
}
case '/':
{
tempNum = -1;
break;
}
default:
/* 에러 처리*/
break;
}
OctStack.push(tempNum);
}
int answer = 0;
int power8 = 0;
while (!OctStack.empty())
{
const int tempVal = OctStack.top();
OctStack.pop();
answer += tempVal * pow(8, power8);
power8++;
}
std::cout << answer << "\n";
}
전체 코드는 다음과 같습니다
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <algorithm>
#include <numeric>
#include <cmath>
class COctoLang
{
private:
public:
COctoLang()
{
}
~COctoLang()
{
}
void Communicate()
{
while (true)
{
std::string inputStr;
std::getline(std::cin, inputStr);
if (inputStr == "#")
{
break;
}
else
{
printTranslation(inputStr);
}
}
}
void printTranslation(const std::string str)
{
std::stack<long long>OctStack;
std::stringstream ss(str);
for (auto i = 0; i < str.length(); i++)
{
char tempChar;
ss >> tempChar;
int tempNum;
switch (tempChar)
{
case '-':
{
tempNum = 0;
break;
}
case '\\':
{
tempNum = 1;
break;
}
case '(':
{
tempNum = 2;
break;
}
case '@':
{
tempNum = 3;
break;
}
case '?':
{
tempNum = 4;
break;
}
case '>':
{
tempNum = 5;
break;
}
case '&':
{
tempNum = 6;
break;
}
case '%':
{
tempNum = 7;
break;
}
case '/':
{
tempNum = -1;
break;
}
default:
/* 에러 처리*/
break;
}
OctStack.push(tempNum);
}
int answer = 0;
int power8 = 0;
while (!OctStack.empty())
{
const int tempVal = OctStack.top();
OctStack.pop();
answer += tempVal * pow(8, power8);
power8++;
}
std::cout << answer << "\n";
}
};
int main()
{
std::cin.tie(NULL);
std::ios::sync_with_stdio(false);
COctoLang* cOctoLang = new COctoLang();
cOctoLang->Communicate();
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩하시길 바랍니다 ~ :)
참조 및 인용
C++ Primer
Introduction to Algorithms
https://codemasterkimc.tistory.com/35
C++ 이론을 배울수 있는 곳 정리
개요 C++을 배우는 책, 강의, 블로그, 링크 등을 공유합니다. (링크 및 간략한 설명을 하였으나 만약 원작자가 링크를 거는것을 원치 않을 경우 연락주시기 바랍니다.) 서적 https://www.amazon.com/Prime
codemasterkimc.tistory.com
https://codemasterkimc.tistory.com/50
300년차 개발자의 좋은 코드 5계명 (Clean Code)
이번 글을 통해 배워갈 내용 좋은 코드(Clean Code)를 작성하기 위해 개발자로서 생각해볼 5가지 요소를 알아보겠습니다. 개요 좋은 코드란 무엇일까요? 저는 자원이 한정적인 컴퓨터 세상에서 좋
codemasterkimc.tistory.com
'C++ > C++ 알고리즘' 카테고리의 다른 글
| 백준 2355번 시그마 C++로 구현해보기 (0) | 2021.09.02 |
|---|---|
| 백준 2460번 지능형기차2 C++로 구현해보기 (0) | 2021.09.02 |
| 백준 1731번 등차수열, 등비수열 추론 C++로 구현해보기 (0) | 2021.09.01 |
| 백준 1834 나머지와 몫이 같은 수 C++로 구현해보기 (0) | 2021.09.01 |
| 백준 21867번 JAVA BiteCode C++로 구현해보기 (0) | 2021.09.01 |