본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 풀이 1차 1번 (자연수의 각 자리별 접근)

by 우공80 2022. 9. 29.
728x90

0이 없는 숫자 체계에서 계산하기

문제 지문 #1

어느 누군가가 타임머신을 타고 과거로 가서 숫자 0이 없는 수 체계를 전파했습니다. 역사가 바뀌어 이제 사람들의 의식 속엔 0이란 숫자가 사라졌습니다. 따라서, 현재의 수 체계는 1, 2, 3, ..., 8, 9, 11, 12, ...와 같이 0이 없게 바뀌었습니다.
0을 포함하지 않은 자연수 num이 매개변수로 주어질 때, 이 수에 1을 더한 수를 return 하도록 solution 메소드를 완성해주세요.

매개변수 설명

자연수 num이 solution 메소드의 매개변수로 주어집니다.

  • num은 1 이상 999,999,999,999,999,999 이하의 0을 포함하지 않는 자연수입니다.

return 값 설명

자연수 num에 1을 더한 수를 return 해주세요.

예시

num return
9949999 9951111


예시 설명

9,949,999에 1을 더하면 9,950,000이지만 0은 존재하지 않으므로 9,951,111이 됩니다.

728x90

 

혼자 풀이


나름 머리 싸고 고민해서 입력된 num의 자리수마다 0인지 체크해서 원하는 결과를 얻을 수 있었습니다.
오류가 났던 부분은, 숫자를 자리마다 잘랐을 때, 1자리이기 때문에 char 형인데,
String처럼 생각하고 풀어서 오류가 났습니다.
시험시간이 90분이니, 10문제를 푸는데, 평균 9분안에 풀어야 하는데, 아마도 제일 쉬울 것으로 예상되는 1번 문제 푸는데30분 정도 걸렸으니, 갈길이 먼것 같습니다.

/***************************************************************
     1차 1번 0이 없는 숫자체계에서 계산하기
 **************************************************************/
class MySolution {
    public long solution(long num) {
        // Write code here.
        long answer = 0;
        String tempAnswer="";
        String strNum=Long.toString(num+1);

        for(int i=0;i<strNum.length();i++) {
            if(strNum.charAt(i)=='0') {
                tempAnswer=tempAnswer+'1';
            }else tempAnswer=tempAnswer+strNum.charAt(i);
        }

        answer=Long.parseLong(tempAnswer);
        return answer;
    }

// The following is main method to output testcase.
    public static void main(String[] args) {
        MySolution sol = new MySolution();
        long num = 9949999;
        long ret = sol.solution(num);

        // Press Run button to receive output.
        System.out.println("Solution: return value of the method is " + ret + " .");
    }
}

 

정답


정답 파일 보니, 코드가 훨씬 간결합니다. String이나 char 형을 쓰지 않고, 자리 수 의미를 이해하고 계산해 낸 것이 아주 깔끔한데요. 개발자들은 다 이런식으로 생각하는 건가요?? 약간의 자괴감을 느꼈습니다.

//정답 파일
class Solution {
    public long solution(long num) {
        num++;
        long digit = 1;
        while (num / digit % 10 == 0) {
            num += digit;
            digit *= 10;
        }
        return num;
    }
}

 

첨부 파일

 

프로젝트 파일 전체를 첨부합니다.
Solution 이 문제, CorrectSolution 이 정답, MySolution이 제가 푼 것입니다.
"Project from existing sources..." 메뉴에서 불러다 쓰시면 됩니다.

FirstQuestion1.zip
0.01MB

출처: https://www.ybmit.com/cos_pro/cos_pro_r_test.jsp

728x90

댓글