프로그래머스[programmers] - 124 나라의 숫자(C++)[LV2]

2022. 5. 17. 21:41· CodingTest/Programmers
목차
  1. 문제 설명
  2. 제한사항
  3. 정리 
  4. 코드

문제 설명

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

  1. 124 나라에는 자연수만 존재합니다.
  2. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.


자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution함수를 완성해주세요.


제한사항

  • n은 500,000,000이하의 자연수입니다.

1 1 11 42
2 2 12 44
3 4 13 111
4 11 14 112
5 12 15 114
6 14 16 121
7 21 17 122
8 22 18 124
9 24 19 141
10 41 20 142

1~20까지 입출력 예이다.

이런 문제는 이렇게 대입해서 결과를 도출해보면 규칙이 보이기 시작한다.

●규칙 1

  1. 3으로 나눈 나머지에 규칙이 있다.
    1. 나머지가 1이면 1, 나머지가 2이면 2, 나머지가 0이면 4이다.

●규칙 2

  1. n이 3보다 크다면 n을 n/3으로 바꿔서 다시 나눠준다.
  2. 예를 들어 4를 3으로 나눈다. 그러면 나머지가 1이므로 answer에다가 1을 추가해준다.
  3. 4를 3으로 나눈 몫을 다시 3으로 나눈다. 그러면 1%3이므로 1이다. 따라서 answer에다가 1을 추가해준다.
  4. 역순으로 추가해줬기 때문에 문자열을 뒤집어준다.
이렇게 하니까 3의 배수일 때 한 칸씩 늘어나서 문제가 생겼다. 
ex) 6%3 =0 -> 4 추가 , 6/3=2 ->2 추가
내가 설계한 규칙대로라면 6은 24가 출력돼야 한다. 하지만 입출력예로 6은 14가 되야한다.
생각을 해보니 11,12,14 이렇게 3개씩 하고 범위를 벗어나야 하는데 만약 n이 3의 배수이면 바로 범위를 벗어나기 때문에 3의 배수일 때는 n을 (n/3)-1로 초기화해주니까 문제가 풀렸다.

정리 

  1. 3으로 나눈 나머지에 따라 1,2,4를 넣어준다
  2. 만약 n이 3보다 클 경우 n을 3으로 나눈 나머지에 따라 answer에 추가해주고 그다음 n을 설정해준다
    1. n을 설정해주는 방식은 2가지이다.
      1. n이 3의 배수라면 n=(n/3)-1이다
      2. n이 3의 배수가 아니라면 n=n/3이다.

코드

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string solution(int n);
int main()
{
int n;
cin >> n;
cout<<solution(n);
}
string solution(int n)
{
string answer;
string result;
string s = "412";
if (n <= 3)
{
answer = s[n % 3];
return answer;
}
while (n!=0)
{
int r;
r = n % 3;
//나머지가 1이면 1, 나머지가 2이면 2, 나머지가 0이면 4
answer += s[r];
if (n % 3 == 0)
n = (n / 3)-1;
else
n = n / 3;
}
reverse(answer.begin(), answer.end());
return answer;
}
느낀 점 : c++ 에는 다양한 기능이 있다는 것을 깨달았다. 문자열을 뒤집어서 넣는 게 있을 거라고 생각했는 데 있어서 편리하게 짤 수 있었다. 더 많은 기능을 숙지하고 있는 게 나중에도 유리할 것 같았다.
reverse(answer.begin(),answer.end()); //answer를 뒤집어줌.

 

저작자표시 (새창열림)

'CodingTest > Programmers' 카테고리의 다른 글

프로그래머스[programmers] - 가장 큰 수 찾기(C++)[LV2]  (0) 2022.05.27
프로그래머스[programmers] - 행렬 테두리 회전하기(C++)[LV2]  (0) 2022.05.26
프로그래머스[programmers] - 거리두기 확인하기(C++)[LV2]  (0) 2022.05.25
프로그래머스[programmers] - 오픈채팅방(C++)[LV2]  (0) 2022.05.16
프로그래머스[Programmers] - 메뉴 리뉴얼(C++)[LV2]  (0) 2022.05.11
  1. 문제 설명
  2. 제한사항
  3. 정리 
  4. 코드
'CodingTest/Programmers' 카테고리의 다른 글
  • 프로그래머스[programmers] - 행렬 테두리 회전하기(C++)[LV2]
  • 프로그래머스[programmers] - 거리두기 확인하기(C++)[LV2]
  • 프로그래머스[programmers] - 오픈채팅방(C++)[LV2]
  • 프로그래머스[Programmers] - 메뉴 리뉴얼(C++)[LV2]
재한
재한
안녕하세요 💻
재한
짜이한
전체
오늘
어제
  • 분류 전체보기 (504)
    • Skils (118)
      • Android (52)
      • C++ (5)
      • Kotlin (36)
      • Algorithm (24)
      • Server (1)
    • CodingTest (228)
      • Programmers (45)
      • Baekjoon (183)
    • Experience (8)
      • 후기(코딩테스트,프로그램,프로젝트) (8)
    • Computer Science (70)
      • Design Pattern (2)
      • OOP (2)
      • Computer Architecture (14)
      • OS (2)
      • Software Engineering (3)
      • DataBase (8)
      • Network (39)
    • 학교 (75)
      • R프로그래밍 (26)
      • 회계와 사회생활 (17)
      • 컴퓨터학개론 (20)
      • it기술경영개론 (12)

블로그 메뉴

  • 홈
  • 태그
  • 카테고리
  • 글쓰기
  • 설정

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
재한
프로그래머스[programmers] - 124 나라의 숫자(C++)[LV2]
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.