2023-08-29 TIL

SeongH·2023년 8월 29일
0

새롭게 알게 된 것

객체지향 프로그래밍의 특징

  • 캡슐화 : 각각의 필요한 기능 구현하고 뭉쳐서 새로운 기능 구현

  • 상속

  • 다향성 : 하나의 매서드 이름이 다양한 객체에서 다르게 동작 할 수 있게(오버로딩, 오버라이딩)

  • 추상화 : 복잡한 기능 단순화(세부구현 감추고 개념 구현 집중) -> 추상클래스

  • 객체 : 데이터와 메서드를 가지며 실제 세계의 개체나 개념을 모델링

객체(붕어빵): 클래스의 인스턴스( 클래스의 실체화된 형태), 각 객체는 독립적인 상태를 가지고 있다.

클래스(붕어빵 틀) -> 객체를 만들기 위해서 존재할뿐

구조체와의 차이점: 구조체는 선언하면서 바로 변수가 될 수 있지만 클래스는 객체화를 진행하고 연결해줘야만 함
구조체는 값형식이고 스택에 할당
클래스는 참조 형식이고 힙에 할당되고 참조로 전달
구조체는 작은 크기의 데이터에 클래스는 더 복잡한 객체를 표현하기 위해서 사용!

Player player = new Player();

접근 제한자: public, private, protected

필드: 클래스 내부에 선언된 변수
매서드 : 클래스 내부에 선언된 함수

<생성자 기초>

입력하는 코드까지 만들고 싶으면 디폴트 생성자 까지 만들어 줘야 한다!

알고리즘 코드 카타

<문자열을 정수로 바꾸기>

public class Solution 
{
    public int solution(string s) 
    {
        int answer = int.Parse(s);
        return answer;
    }
}

<정수 제곱근 판별>

public class Solution {
    public long solution(long n) {
        long answer = 0;
        for(long i=1; i<=n; i++)
        {
            if(i*i==n)
            {
                answer =(i+1)*(i+1);
                break;
            }
            else if(i*i>=n)
            {
                answer= -1;
                break;
            }
        }
        return answer;
    }
}

-다른 사람의 풀이-

using System;
public class Solution 
{
    public long solution(long n) 
    {
        long sqrt = (long)Math.Sqrt(n);
        long answer = 0;
        
        if(n == sqrt*sqrt)
            answer = (sqrt+1)*(sqrt+1);
        else
            answer = -1;
        
        return answer;
    }
}

나는 for문과 if 문을 이용해서 값을 일일이 대입해가며 확인해보는 방식을 이용하였지만
다른사람의 풀이를 보니 Math.Sqrt() 매서드를 이용해서 제곱근을 구할수 있다는 사실을 새롭게 알게 되었다.
ex) var sqrt_test = Math.Sqrt(9);
-> sqrt_test 변수의 값은 3이된다.

Math.Sqrt(n) 의 값이 정수가 아닐 수도 있으니 (long)으로 형변환 까지 하기!!

<정수 내림차순으로 배치하기>

-내 풀이-

using System;

public class Solution 
{
    public long solution(long n) 
    {
        long answer = 0;
        string digitNumber = "";
        
        string number = n.ToString();
        char[] digit = number.ToCharArray();
        
        Array.Sort(digit);
        Array.Reverse(digit);
        
        for(int i = 0; i < digit.Length; i++)
        {
            digitNumber += digit[i];
        }
        answer = long.Parse(digitNumber);
        
        
        return answer;
    }
}

-다른사람의 풀이-

using System;

public class Solution {

    public long solution(long n) {
        long answer = 0;
        // n을 곧장 char형태로 변환해서 새로운 char 배열에 저장함
        char[] temp = n.ToString().ToCharArray();
        
        // 배열을 오름차순으로 정렬함
        Array.Sort(temp);
        
        // 배열을 뒤집는다 = 내림차순으로 바뀜
        Array.Reverse(temp);
        
        // temp배열을 문자열로 만든뒤에 long형태로 변환한다.
        // long이므로 ToInt32가 아니라 64다. 헷갈린다면 그냥 long.Parse를 쓰자.
        answer = Convert.ToInt64(new string(temp));
        
        // 정답을 리턴함
        return answer;
    }
}

나는 일일이 반복문을 사용해서 문자 배열을 문자열로 합쳐주었는데 문자 배열을 문자열로 바꾸는 new string() 이라는 방법이 있다는 사실을 새롭게 알게 되었다.

profile
개발자 꿈나무

0개의 댓글