티스토리 뷰
알고리즘을 푸는데 필요한 능력은
이해, 분석, 설계. 코딩, 디버깅, 테스트, 최적화, 문제해결능력이 필요하다고 한다.
하지만 지금의 나는 이해와 분석까지는 했더라도 설계. 코딩 나머지 모든 것이 부족하다.
알고리즘은 for문과 if문으로 풀 수있다고하는데
실제로도 내가 푼 문제 대부분이 조건문, 반복문, 배열을 쓰고 문제가 다수있다.
조건문은 가장 기본적인 분기 처리를 담당하고 프로그램의 흐름을 제어
반복문은 특정 작업을 반복적으로 수행하는 등 다양한 작업을 처리
배열은 하나의 변수에 여러 값을 저장하여 처리할 수 있으며, 인덱스를 사용하여 각 값에 접근
하지만 이 3가지로는 모든문제의 코드를 짤 자신이 없다.
그래서 자바에 포함에 되어있는 내장함수를 쓰면
더욱 더 간편하고 최적화 된 코드를 작성할 수 있다고 생각된다.
Java 내장함수에서 가장 자주 사용되는 내장함수
- Math 클래스 함수: 수학 함수를 제공, sin, cos, tan, pow, sqrt 등이 있다.
- String 클래스 함수: 문자열을 처리하기 위한 함수, length, substring, indexOf, replace
- Arrays 클래스 함수: 배열을 처리하기 위한 함수를 , sort, binarySearch, toString 등이 있다.
- Date 클래스 함수: 날짜와 시간을 처리하기 위한 함수, getTime, getMonth, getYear 등이 있다.
- 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
링크
TAG
- flask
- Auto Scaling
- CodeDeploy
- CICD
- 오토 스케일링
- 위치의 중요성
- java
- aws
- Load Balancer
- HTML
- JWT
- githubactions
- EC2
- script
- 로드밸런서
- 인스턴스
- 시작 템플릿
- 로드 밸런서
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함