알고리즘 문제 풀기
[프로그래머스 12899] 124 나라의 숫자 (java)
Solu-
2021. 4. 20. 13:12
링크 : programmers.co.kr/learn/courses/30/lessons/12899
코딩테스트 연습 - 124 나라의 숫자
programmers.co.kr
나의 코드
class Solution {
public String solution(int n) {
String answer = "";
int na; // 나머지를 저장할 변수
while(n != 0) {
na = n % 3;
n = n / 3;
if (na == 0) {
// 나누어 떨어질 경우
answer = "4" + answer;
n--;
}
else if (na == 1) {
answer = "1" + answer;
}
else if (na == 2) {
answer = "2" + answer;
}
}
return answer;
}
}
처음에는 단순한 숫자 교체로만 이해해서, 다양한 예제 및 큰 숫자까지 생각하질 못했다. 이 문제에서 착각하면 안되는 것은 11 => 42, 12 => 44, 13 => 111이 된다는 것이다. 즉 3진법과 비스무리 하게 진행하는것만 이해했으면 조금 빨리 해결했을지도 모른다. 나누어떨어질 때를 제외하곤 3진법과 동일하게 진행한다.
문제에 대한 이해도가 부족해서 많은 시간을 낭비한 스스로에게 좀 더 고생하라고 격려해주고 싶다..
cpp 코드이지만 설명이 이해하기 좋아 링크를 첨부한다.
프로그래머스 - 124 나라의 숫자(Level 2)/Wanna Be 컴잘알
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12899 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이..
minnnne.tistory.com
모범 답안
class Solution {
public String solution(int n) {
String[] num = { "4", "1", "2" };
String answer = "";
while(n > 0) {
answer = num[n % 3] + answer;
n = (n - 1) / 3;
}
return answer;
}
}
이 깔끔하고 간결한 코드를 보고 감탄했다. 나누어 떨어질 때 (나머지 == 0일 때)에 대한 처리를 Stirng[]을 통해 간단하게 처리했으며, 몫을 1 줄여주는 로직은 n-1을 통해 생략했다.