[프로그래머스 C#] Lv.2 숫자 변환하기

2024. 3. 7. 18:58· C#/프로그래머스 코딩 문제 풀이

1. 문제설명\

자연수 x를 y로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.

● x에 n을 더합니다
● x에 2를 곱합니다.
● x에 3을 곱합니다.

자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요. 이때 x를 y로 만들 수 없다면 -1을 return 해주세요.

2. 제한사항

● 1 ≤ x ≤ y ≤ 1,000,000
● 1 ≤ n < y

3. 입출력 예시

x y n result
10 40 5 2
10 40 30 1
2 5 4 -1

4. 나의 풀이(미완성)

    public int solution(int x, int y, int n)
    {
        int answer = 0;

        List<int> list = new List<int>();

        list.Add(PlusN(x, y, n));
        list.Add(Multiple2(x, y, n));
        list.Add(Multiple3(x, y, n));
        list.Add(Multiple2And3(x, y, n));

        list.RemoveAll(number => number == -1);
        list.Sort();

        if (list.Count == 0) return -1;

        return answer = list[0];
    }
    public int PlusN(int x, int y, int n)
    {
        int cnt = 0;

        while (x < y)
        {
            if(x <= y)
            {
                x += n;
                cnt++;
            }
        }

        if (x != y) cnt = -1;
        return cnt;
    }
    public int Multiple2(int x, int y, int n)
    {
        int cnt = 0;

        while (x * 2 <= y)
        {
            if (x == y) break;

            x *= 2;
            cnt++;
        }
        if (x != y)
        {
            if ((y - x) % n == 0) cnt += (y - x) / n;
            else cnt = -1;
        }
        return cnt;
    }
    public int Multiple3(int x, int y, int n)
    {
        int cnt = 0;

        while (x * 3 <= y)
        {
            if (x == y) break;

            x *= 3;
            cnt++;
        }
        if (x != y)
        {
            if ((y - x) % n == 0) cnt += (y - x) / n;
            else cnt = -1;
        }
        return cnt;
    }
    public int Multiple2And3(int x, int y, int n)
    {
        int cnt = 0;
        int num = x;

        List<int> list = new List<int>();

        while (x * 2 <= y)
        {
            if (x == y) break;

            x *= 2;
            cnt++;
        }
        if (x != y)
        {
            if ((y - x) % n == 0) cnt += (y - x) / n;
            else cnt = -1;
        }
        list.Add(cnt);

        cnt = 0;
        x = num;

        while (x * 3 <= y)
        {
            if (x == y) break;

            x *= 3;
            cnt++;
        }
        if (x != y)
        {
            if ((y - x) % n == 0) cnt += (y - x) / n;
            else cnt = -1;
        }
        list.Add(cnt);

        cnt = 0;
        x = num;

        while (x * 2 <= y || x * 3 <= y)
        {
            if (x == y) break;

            x *= 2;
            cnt++;

            if (x * 3 <= y)
            {
                x *= 3;
                cnt++;
            }
        }
        if (x != y)
        {
            if ((y - x) % n == 0) cnt += (y - x) / n;
            else cnt = -1;
        }
        list.Add(cnt);

        cnt = 0;
        x = num;

        while (x * 2 <= y || x * 3 <= y)
        {
            if (x == y) break;

            x *= 3;
            cnt++;

            if (x * 2 <= y)
            {
                x *= 2;
                cnt++;
            }
        }
        if (x != y)
        {
            if ((y - x) % n == 0) cnt += (y - x) / n;
            else cnt = -1;
        }
        list.Add(cnt);

        
        list.RemoveAll(number => number == -1);
        list.Sort();

        if (list.Count == 0) return -1;
        

        return cnt = list[0];
    }

//예제 코드는 통과했지만 전체적으로 미완성입니다. 예외처리 또는 코드를 갈아엎고 다시 업로드하겠습니다.

//힌트 댓글은 언제나 환영입니다ㅎㅎ

'C# > 프로그래머스 코딩 문제 풀이' 카테고리의 다른 글

[프로그래머스 C#] Lv.2 점 찍기  (0) 2024.03.10
[프로그래머스 C#] Lv.2 H-Index  (0) 2024.03.08
[프로그래머스 C#] Lv.2 주식가격  (0) 2024.03.06
[프로그래머스 C#] Lv.2 영어 끝말잇기  (0) 2024.03.05
[프로그래머스 C#] Lv.2 다리를 지나는 트럭  (0) 2024.03.04
'C#/프로그래머스 코딩 문제 풀이' 카테고리의 다른 글
  • [프로그래머스 C#] Lv.2 점 찍기
  • [프로그래머스 C#] Lv.2 H-Index
  • [프로그래머스 C#] Lv.2 주식가격
  • [프로그래머스 C#] Lv.2 영어 끝말잇기
ForMan_
ForMan_
C# 언어로 프로그래머스 문제를 풀이하고, Unity 엔진으로 게임을 개발하며, 자료구조를 공부하는 과정을 반복문처럼 꾸준히 탐구하고 공유하는 '반복해서 노력하는 남자, ForMan'의 블로그입니다.
ForMan_
반복해서 노력하는 남자, ForMan
ForMan_
전체
오늘
어제
  • 분류 전체보기
    • C#
      • 프로그래머스 코딩 문제 풀이
      • 자료구조 이해하기
      • 알고리즘 기초 익히기
    • Unity
      • Unity 디자인 패턴
      • Unity 타워디펜스게임 프로젝트
      • Unity 물리기반 Merge게임 프로젝트(수박라..
      • Unity FPS게임 프로젝트(오버워치라이크)
    • UI
      • 젠레스존제로 UI작업 시작
      • 젠레스존제로 UI 이펙트 작업
      • 젠레스존제로 UI 사운드 작업
      • 젠레스존제로 UI 스크롤뷰 작업(메뉴창)

블로그 메뉴

  • 홈
  • 방명록
  • 태그

최근 글

최근 댓글

인기 글

태그

  • 유니티디자인패턴
  • 머쓱이
  • 유니티게임
  • 타워디펜스게임
  • 유니티게임프로젝트
  • c#
  • 프로그래머스
  • 코딩테스트
  • Unity
  • 완전탐색
  • 과일합치기
  • 오버워치
  • 오름차순
  • 게임프로젝트
  • 정렬알고리즘
  • 수박게임
  • 유니티
  • 동적프로그래밍
  • 오버워치만들기
  • forman
Thanks for Skin
hELLO · Designed By 정상우.v4.2.2
ForMan_
[프로그래머스 C#] Lv.2 숫자 변환하기
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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