2023.07.31 - java 문법 종합반(3주차) + 알고리즘 (3)

mjjin·2023년 7월 31일
0

Java 문법 종합반

목록 보기
6/8

클래스(calss)

<this>

this는 객체 즉, 인스턴스 자신을 표현하는 키워드이다.

- this

  • 객체 내부 생성자 및 메서드에서 객체 내부 멤버에 접근하기 위해 사용될 수 있다.
  • 모든 객체 내부 멤버 접근시 필수는 아니지만, 매개변수명과 필드 명이 동일할 때에는 필수적으로 사용된다.

- this()

  • 인스턴스 자신의 생성자를 호출하는 키워드
  • 객체 내부 생성자 및 메서드에서 해당 객체의 생성자를 호출 할 수 있다.
  • this() 키워드를 사용해 다른 생성자를 호출할 때는 반드시 해당 생성자의 첫 줄에 작성되어야 한다.

<접근제어자(Access Modifier)>

제어자는 클래스, 변수, 메서드의 선언부에 사용되며 외부에서 접근하지 못하도록
제한할 수 있다.

public, protected, default, private로 구성되어 있으며
각 접근제한은 다음과 같다.

private : 해당 클래스 내에서만 접근 가능
public : 모든 클래스에서 접근 가능
default : (아무것도 적지 않았을 때) 같은 패키지 내에서만 접근 가능
protected : 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스에서 접근

접근 제어 범위 : private < default < protected < public

<패키지(Package)>

패키지란 클래스의 일부분이면서 클래스를 식별해 주는 용도이다.

  • 패키지는 상위 패키지와 하위 패키지를 도트(.)로 구분한다.
  • package 상위패키지.하위패키지; 로 선언이 가능하다.
  • 다른 패키지에서 사용 시, import 키워드로 사용 할 수 있다.
    ex) import Camera.FactoryCam;

<상속(Inheritance)>

부모 클래스의 기능을 그대로 물려 받을 수 있고
부모 클래스의 기능을 확장하여 사용 할 수도 있다.
단, 자식은 하나의 부모 클래스만 가질 수 있다.

클래스 간의 상속은 extends 키워드를 사용하여 정의한다.

public class 자식클래스 extends 부모클래스 {

}

상속관계는 IS-A 관계라고도 불린다.

예시)
부모클래스 : 카메라 / 자식클래스 : 공장카메라의 경우
공장카메라는 카메라다. (FactoryCam is a Camera.)

부모클래스 : 차 / 자식클래스 : 경찰차의 경우
경찰차는 차다. (police car is a car)

<오버라이딩(Overriding)>

부모 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것을 오버라이딩이라고 한다.
오버라이딩을 사용하기 위해서는 세가지 조건이 필요한데,

  • 선언부가 부모 클래스의 메서드와 일치해야한다.
  • 접근 제어자를 부모 클래스의 메서드 보다 좁은 범위로 변경할 수 없다.

알고리즘 문제풀이

<오늘의 문제>

알고리즘 문제 출처 : 프로그래머스 스쿨
1. 머쓱이보다 키 큰 사람
2. 배열 두배 만들기
3. 삼각형의 완성조건(1)
4. 중앙값 구하기
5. 짝수는 싫어요
6. 배열의 유사도


1. 머쓱이보다 키 큰 사람

import java.util.ArrayList;
class Solution {
    public int solution(int[] array, int height) {
        ArrayList<Integer> answer = new ArrayList<>();
        for (int i = 0; i < array.length; i++) {
            if (height < array[i]) {
                answer.add(array[i]);
            }
        }
        return answer.size();
    }
}

2. 배열 두배 만들기

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = new int[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            answer[i] = numbers[i]*2;
        }
        return answer;
    }
}

3. 삼각형의 완성조건(1)

import java.util.Arrays;
class Solution {
    public int solution(int[] sides) {
        Arrays.sort(sides);
        return sides[2] < sides[0] + sides[1] ? 1 : 2;
    }
}

4. 중앙값 구하기

import java.util.Arrays;
class Solution {
    public int solution(int[] array) {
        Arrays.sort(array);
        return array[(array.length-1)/2];
    }
}

5. 짝수는 싫어요

class Solution {
    public int[] solution(int n) {
        int arraySize = n % 2 == 1 ? n/2+1 : n/2;
        int[] answer = new int[arraySize];
        int i = 0;
        int k = 0;
        while(i <= n) {
            if (i%2 ==1) {
                answer[k] = i;
                k++;
            }
            i++;
        }
        return answer;
    }
}

6. 배열의 유사도

import java.util.Objects;
class Solution {
    public int solution(String[] s1, String[] s2) {
        int answer = 0;
        for (String str1 : s1) {
            for (String str2 : s2) {
                if (Objects.equals(str1, str2)) {
                    answer ++;
                }
            }
        }
        return answer;
    }
}

문제 풀이 후기

알고리즘에도 익숙해졌는지 코드 작성은 수월했다.
물론 다른 분들 처럼 한 줄로 끝내버리지는 못하고 있다.
3주차를 끝내고 4주차와 5주차가 남았는데
5주차가 모두 종료된 이후 알고리즘을 다시 풀어보며
지금 작성한 코드와 비교하는 시간을 가질 예정이다.
그 때는 더욱 더 효율적으로 코드를 짤 수 있길..

0개의 댓글