2023-08-30 TIL

SeongH·2023년 8월 30일
0

알고리즘 코드 카타

<하샤드 수>

-내 풀이-

public class Solution 
{
    public bool solution(int x) 
    {
        bool answer = true;
        int sum = 0;
        char[] temp = x.ToString().ToCharArray();
        
        for(int i = 0; i < temp.Length; i++)
        {
            sum += int.Parse(temp[i].ToString());
        }
        if(x%sum == 0)
            return answer;
        else
            return false;
        
        
    }
}

-다른사람의 풀이-

public class Solution {
    public bool solution(int x) {
        bool answer = true;

        char[] arr = x.ToString().ToCharArray();
        int Temp = 0;
        foreach (char item in arr)
        {
            Temp += int.Parse(item.ToString());
        }


            answer = false;
        }

        return answer;
    }
}

배열의 반복문은 foreach 문을 사용하면 더 간단하다!!!

<두 정수 사이의 합>

-나의 풀이 -

public class Solution 
{
    public long solution(int a, int b) 
    {
        long answer = 0;
        if(b >= a)
        {
            for(int i = a; i < b+1; i++)
            answer += i;
        }
        else
        {
            for(int i = b; i < a+1; i++)
            answer += i;          
        }
        
        return answer;
        
    }
}

-다른 사람 풀이-

using System;
public class Solution {
    public long solution(int a, int b) {
       long answer = 0;

          return ((long)(Math.Abs(a - b) + 1) * (a + b)) / 2;
    }
}

다른 사람의 풀이를 보면서 알게 된 것은 Math.Abs()로 절댓값을 계산 할 수 있다는 것을 새롭게 알게 되었고, 고등학교 때 배웠던 등차수열의 계산법을 이용해서 풀이하는 생각을 할 수 있다는 것에서 조금 놀랐다. 확실히 이런 계산 문제에서 수학적 개념을 이용한다면 이번 문제에서 처럼 반복문 대신 간단한 연산만으로도 값이 나오게 되므로 코드를 더 간단하고 효율적으로 짤 수 있기 때문에 프로그래밍 수학 공부도 소홀히 하면 안된다는 것을 느끼게 되었다.

<콜라츠 추측>

public class Solution {
    public int solution(int num) 
    {
        long temp = num;
        int answer = 0;
        while(temp != 1)
        {
            if(temp % 2 == 0)
            temp /= 2;
            else
            temp = temp * 3 + 1;
            answer++;
            
        if (answer > 500)
        {
            return -1;
        }
            
        }
        return answer;
    }
}

처음 문제를 풀때 입력받은 num값을 따로 long형태로 바꾸어 주지 않고 바로 num값으로 반복문을 계산하였는데, 입력값 626331을 입력받았을 때 계속 오류가 나게 되었다.
처음에는 이유를 알지 못했는데 계속 코드를 들여다보다가 반복문에서 홀수일때는 3을 곱해주다보니 어떤 경우에서는 num값이 int 의 최대값 이상이 된다는 것을 알게 되었다. 앞으로는 int 값에서 끝날것 같아 보이는 연산이어도 곱연산 같이 값이 한번에 커지게 되는 연산에서는 주의해야 될 것 같다.

기억해야 할 것

  • c# -> 다중상속은 지원x 인터페이스상속을 할때만 가능

  • virtual >> 참조의 형태와 실형태가 다를떄 사용

  • Math.Abs()로 절댓값 계산 가능

  • 배열의 반복문은 foreach문을 사용하면 더 간단하다.

  • 곱연산같이 한번에 크기가 커지는 연산에서는 각 자료형의 크기에 주의하라!

profile
개발자 꿈나무

0개의 댓글