[BOJ] 1373번: 2진수 8진수

HyeRyun·2020년 11월 4일
0

Baekjoon Online Judge

목록 보기
6/30

✔️ 문제

😎 소스 코드

#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>

using namespace std;

string solution(string binary){
  string answer = "";
  int count = 0, sum = 0;

  for (int i = (int)binary.length() - 1; i >= 0; i--) {
    if (binary[i] == '1'){
      switch (count) {
        case 0:
          sum += pow(2, 0);
          break;
        case 1:
          sum += pow(2, 1);
          break;
        default:
          sum += pow(2, 2);
          break;
      }
    }
    
    count++;
    
    if (count == 3 && i != 0) {
      answer += to_string(sum);
      sum = 0;
      count = 0;
    }
  }
  
  answer += to_string(sum); // 마지막에 남은거 문자열에 더함
  reverse(answer.begin(), answer.end()); // 더한 문자열을 뒤집음
  
  cout << answer << endl;
  
  return answer;
}

int main(){
  string input;
  cin >> input;
  
  solution(input);
  
  return 0;
}

✊ 문제를 풀고 나서

문제 접근

  1. 입력받은 문자열 string input의 맨 마지막 인덱스부터 3개씩 끊는다.
  2. 3개씩 계산할거라서 int count 변수를 두어 i가 증가될 때 마다 count 변수도 증가시킨다.
  3. 현재 탐색 중인 binary[i]가 1일 경우에만 제곱 계산을 한다.
  4. count가 3이 되면 3개 계산이 끝났다는 의미이므로 count, sum 변수를 0으로 초기화한다.

얼핏 봐서는 간단한 문제인데 생각보다 그렇지 않았다. 막판에 코드를 다 작성하고 확인할 때 쓸데없이 0이 붙는 문제가 생겼다. 그래서 디버깅해보니깐

if (count == 3) {
      answer += to_string(sum);
      sum = 0;
      count = 0;
    }

그때는 if 조건문에 이렇게만 썼는데, 이 코드가 문자열의 길이가 3의 배수일 때 모든 계산을 끝낸 뒤 0을 붙이는 문제를 만든거였다. 그래서 i != 0 조건을 추가했더니 성공!

profile
개발개발

0개의 댓글