2023-08-28 TIL

SeongH·2023년 8월 28일
0

알고리즘 코드 카타

<나머지가 1이 되는 수 찾기>

using System;

public class Solution 
{
    public int solution(int n) 
    {
        int answer = 0;
        
        for(int i = 1; i < n; i++)
        {
            if(n % i == 1 )
            {
                answer = i;
                break;
            }
        }
        
        return answer;
    }
}

<x만큼 간격이 있는 n개의 숫자>

public class Solution 
{
    public long[] solution(int x, int n) 
    {
        long[] answer = new long[n];
        
        for(int i = 1; i < n+1; i++)
        {
            answer[i-1] = i*(long)x;
        }
        return answer;
        
    }
}

-배열을 생성할때 반복문 사용할꺼면 크기도 정해서 만들기!!
ex) long[] answer = new long[n];

-내가 했던 실수(생각) :
(long)으로 굳이 형변환을 해주지 않아도 'answer' 은 long 형이고 i와 x는 int형이므로 크기가 더 큰 long형 안에 포함이 된다고 생각했지만 i값이 커지면 int값의 범위를 벗어나게된다.(answer은 long이지만
answer 값에 대입해주는 i * x 의 값이 int이므로 그값이 오버플로됨)

<자연수 뒤집어 배열로 만들기>

- 내가 한 풀이 -

public class Solution 
{
    public int[] solution(long n) 
    {
        string number = n.ToString();
        char[] numberdiv = number.ToCharArray();
        int[] answer = new int[numberdiv.Length];
        
        for(int i = 0; i < numberdiv.Length; i++)
        {
            answer[i] = int.Parse(numberdiv[numberdiv.Length-1 - i].ToString());
        }
        return answer;
    }
}

입력받은 숫자를 문자열로 또, 문자열에서 char형으로 하나씩 쪼갠 배열로 만든뒤 배열의 순서를 역순으로 다시 재 정렬하는 방식

- 다른사람의 풀이 -

using System;

public class Solution {
    public long[] solution(long n) {
        int size = n.ToString().Length;
        long[] answer = new long[size];

        for(int i = 0; i < size; i++){
            answer[i] = n % 10;
            n /= 10;
        }
        return answer;
    }
}

나도 처음에는 이 사람의 방식(반복문과 나머지 연산을 이용한 방식)을 떠올리고 구현해보려고 하였으나 맨뒤의 숫자를 처리하는 방식( ex> 10의자리 숫자를 구하려고 100으로 나머지연산을 하게 되면 일의 자리숫자도 같이 남게 되는 문제)을 따로 떠올리지 못해서 다른 방식으로 풀게 되었는데 반복문을 사용할 때마다 n값을 10으로 나눈 값을 대입해주면 간단하게 가장 뒤에 오는 숫자를 처리할 수 있다는 것을 새롭게 배우게 되었다.

profile
개발자 꿈나무

0개의 댓글