티스토리 뷰

Java

프로그래밍 기초, 알고리즘

장진혁 2023. 2. 19. 18:36

알고리즘을 푸는데 필요한 능력은

이해, 분석, 설계. 코딩, 디버깅, 테스트, 최적화, 문제해결능력이 필요하다고 한다. 

 

하지만 지금의 나는 이해와 분석까지는 했더라도 설계. 코딩 나머지 모든 것이 부족하다. 

알고리즘은 for문과 if문으로 풀 수있다고하는데 

실제로도 내가 푼 문제 대부분이 조건문, 반복문, 배열을 쓰고 문제가 다수있다.

 

조건문은 가장 기본적인 분기 처리를 담당하고 프로그램의 흐름을 제어
반복문은 특정 작업을 반복적으로 수행하는 등 다양한 작업을 처리
배열은 하나의 변수에 여러 값을 저장하여 처리할 수 있으며, 인덱스를 사용하여 각 값에 접근

 

하지만 이 3가지로는 모든문제의 코드를 짤 자신이 없다.

그래서 자바에 포함에 되어있는 내장함수를 쓰면

더욱 더 간편하고 최적화 된 코드를 작성할 수 있다고 생각된다.

 

 

Java 내장함수에서 가장 자주 사용되는 내장함수

  1. Math 클래스 함수: 수학 함수를 제공, sin, cos, tan, pow, sqrt 등이 있다.
  2. String 클래스 함수: 문자열을 처리하기 위한 함수, length, substring, indexOf, replace
  3. Arrays 클래스 함수: 배열을 처리하기 위한 함수를 , sort, binarySearch, toString 등이 있다.
  4. Date 클래스 함수: 날짜와 시간을 처리하기 위한 함수, getTime, getMonth, getYear 등이 있다.
  5. Random 클래스 함수: 난수 생성과 관련된 함수를 제공한다, nextInt, nextDouble 등이 있습니다.

 

public class ex25 { // 정수 제곱근 판별
    public static long solution(long n){
        long answer = 0;

        long num = (long) Math.sqrt(n);
        System.out.println(num);
        answer += num*num==n ? Math.pow(num+1,2) : -1;

        return answer;
    }

    public static void main(String[] args) {
        System.out.println(solution(121));
    }
}
public class ex30 { // 최소직사각형
    public static int solution(int[][] sizes){
        int answer = 0;

        // 명함을 회전시켜서 가로의 젤 긴부분 세로의 젤 기부분을
        // 회전시켜서 배치한다 생각하고 비교하면 쉽게 풀림

        int max_width = Integer.MIN_VALUE;
        int min_height = Integer.MIN_VALUE;
        for (int i=0; i<sizes.length; i++){
            int best_width = Math.max(sizes[i][0], sizes[i][1]);
            int best_height = Math.min(sizes[i][0], sizes[i][1]);
            max_width = Math.max(best_width, max_width);
            min_height = Math.max(best_height, min_height);
        }
        answer = max_width*min_height;

        return answer;
    }

    public static void main(String[] args) {
        int[][] arr = {{60, 50}, {30, 70}, {60, 30}, {80, 40}};
        System.out.println(solution(arr));
    }
}

위에 있는 예제들을 보면 Math함수를 써서 제곱근을 간단하게 표현 가능했고

2개의 값 중에서 가장 큰수, 가장 작은 수를 선택할 수 있었다.

 

 

느낀점

알고리즘을 풀면서 수학이랑 비슷하다고 생각했다.

왜냐하면은 알고리즘을 푸는데 필요한 함수등 접근방법이 도저히 생각나지 않는다. 

즉 수학으로 말하면 공식을 모르는데 어떻게 수학문제를 풀겠는가? 라고 생각이 들었다.

 

그래서 저는 알고리즘 문제를 푸는 것을 꾸준하게 계속 풀어보고

도전해서 성취감도 느끼고 해야 한다는 것을 느꼈고 

지금은 난이도 중 까지만 가더라고 문제를 이해하는 것부터 상당한 시간이 걸린다.

 

결론적으로 알고리즘 문제를 꾸준하게 도전하고 내가 주특기 언어에 대한 익숙해지고

꾸준한 공부가 필요하다.

'Java' 카테고리의 다른 글

Call by Value, Call by Reference  (0) 2023.05.23
length length() 의 차이점  (0) 2023.02.22
JAVA - 숫자를 문자열로 변환  (0) 2023.02.16
JAVA - int형 숫자 자릿수 구하기  (0) 2023.02.16
JAVA - 문자열자르기(split, substring)  (0) 2023.02.16
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함