관리 메뉴

Storage Gonie

(7) [C++, Java] 백준 No.1373 : 2진수 8진수 본문

알고리즘/백준풀이7. 수학

(7) [C++, Java] 백준 No.1373 : 2진수 8진수

Storage Gonie 2019. 5. 6. 21:15
반응형

문제

풀이

자세한 풀이 : 

 

# C++(나의 풀이)
- 확장성이 용이하지만 조금 코드가 길어지는게 단점.

#include <iostream>
#include <string>

using namespace std;

string change2to8(string s)
{
    int result = 0;

    for (int i = 0; i < s.size(); i++)
        result = result * 2 + (s[i] - '0');

    return to_string(result);
}

int main() {
    string s;
    cin >> s;

    string ans;
    
    int r = s.size() % 3;

    // 길이를 3으로 나눈 나머지가 0이 아닌경우 먼저 그 만큼만 떼서 변환하기
    if(r != 0)
        ans.append(change2to8(s.substr(0, r)));

    for (int i = r; i < s.size(); i+=3)
        ans.append(change2to8(s.substr(i, 3)));

    cout << ans << endl;
}

# C++(백준 풀이)

- 확장성에 대한 한계가 있지만 이 문제를 푸는데 가장 쉬운 방법이라 할 수 있다.


#include <iostream>
#include <string>

using namespace std;

int main() {
    string s;
    cin >> s;
    
    int n = s.size();
    
    if (n%3 == 1)
        cout << s[0];
    else if (n%3 == 2)
        cout << (s[0]-'0')*2 + (s[1]-'0');

    for (int i=n%3; i<n; i+=3)
        cout << (s[i]-'0')*4 + (s[i+1]-'0')*2 + (s[i+2]-'0');

    cout << '\n';
}

# Java

import java.util.*;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int n = s.length();
        if (n%3 == 1) {
            System.out.print(s.charAt(0));
        } else if (n%3 == 2) {
            System.out.print((s.charAt(0)-'0')*2 + (s.charAt(1)-'0'));
        }
        for (int i=n%3; i<n; i+=3) {
            System.out.print((s.charAt(i)-'0')*4 + (s.charAt(i+1)-'0')*2 + (s.charAt(i+2)-'0'));
        }
        System.out.println();
    }
}
반응형
Comments