본문 바로가기

전체 글

[JAVA] final은 언제 사용하는 것일까 final은 무엇인가? - final은 엔티티를 한번만 할당하는 것. 두 번 이상 할당하려하면 컴파일 오류가 발생한다. Final Classes Final Methods Final Variables Final 사용 경우 - 함수에 대한 final은 상속하면 절대 안되는 경우에 정의한다. - Override로 인한 실수를 최소화 하고 버그를 줄이기 위해 선언한다. Final 필드의 초기값 주는 방법 1. 필드 선언시 준다 (ex. Final Variables처럼) 2. 생성자를 통해서 주는 방법 - 복잡한 초기화 코드가 필요할 때 - 객체 생성 시에 외부 데이터로 초기화시켜야한다면 더보기
[programmers] 땅따먹기 로직 - 계속 더해가면서 최대값을 찾는다. 이때, 바로 아래에 있는 값은 사용하지 못한다. - 위 -> 아래 가려면 아래 값을 "val = 아래값" 으로 지정해두고나서 더하면서 max값을 찾아야한다. - 아래 -> 위 가면 그냥 최대값을 찾으면 됨. 이때, 바로 위의 값을 제외한 리스트의 max값을 찾는다. 코드 주의할 점 1. DP사용하기! 더보기
[programmers] 가장 긴 팰린드롬 로직 [방법1] 1. 팰린드롬 확인하는 함수 만들기 : 결과값은 문자열 갯수 2. i는 문자열 처음부터, j는 문자열 끝에서부터 진행해서 최대값 구하기 -> 끝에서부터 진행하려면 팰린드롬 결과가 True이면 cnt = 팰린드롬 문자열갯수 [방법2] 1. 팰린드롬 확인하는 함수 만들기 : 결과값은 [True, 문자열 갯수] or [False, 0] 2. i는 문자열 처음부터, j는 문자열 끝에서부터 진행해서 최대값 구하기 -> 끝에서부터 진행하려면 팰린드롬 결과가 True이면 cnt = 팰린드롬 문자열갯수 => 큰 값부터 나올거기때문에 더 적게 계산 코드 [방법1] [방법2] 결과 [방법1] [방법2] 확실히 2번 방법이 빠르다!! 더보기
[programmers] 등굣길 로직 이 그림을 그대로 DP를 이용해 구현한다고 생각하자. 이 문제에서 puddles가 (행, 열)이 아닌 (열, 행)으로 나와있다. 이것을 조심하자!! 코드 주의할 점 1. bfs로 구현했지만, 8번 테케 시간초과 + 효율성 통과율 0%... 2. DP를 이용해서 기존에 있는 값을 활용해서 최종 값을 구한다. 더보기
[programmers] 정수 삼각형 로직 1. 가쪽에서 더해지는 값은 계속 더해진다. 2. 왼쪽, 오른쪽에서 더해질 수 있는 값 중 최대값을 더해준다. 코드 더보기
[programmers] 더 맵게 로직 1. 우선순위큐를 이용해서 가장 작은 값, 두번째로 작은 값을 뺀 후, heappush를 이용해서 넣으면 값의 크기를 기준으로 들어간다. 2. 이때, 값을 두개를 빼야하기 때문에 scoville 리스트에 값이 두개 이상 들어가있어야 first, second로 뺄 수 있고, heapq구조이므로 첫번째 값이랑 K랑 비교해서 크면 뒤에 값들은 다 큰것이다. heapq구조이므로, 마지막으로 값이 하나 남아 있을 때, K보다 작으면 -1을 리턴한다. 코드 주의할 점 1. heapq 이해가 필요하다. heappop, heappush를 사용하기 위해서는 우선 리스트가 heapify로 정렬되어있어야한다. 더보기
[baekjoon] 15686. 치킨 배달 로직 1. 치킨집과 집을 구분한 다음에 M개의 치킨집을 combination으로 조합을 구한다. 2. 치킨집 조합과 집의 거리를 구할 것인데, 최종적으로 치킨집 조합의 최소값을 구하는 것이다. 그러면 집을 돌면서 치킨집과의 거리를 구한다. 각 집마다 최소 길이가 되는 치킨집을 택할 것이다. 그 합이 최소가 되는 거리가 답이다. 코드 더보기
[programmers] N으로 표현 로직 1. 계산된 값들을 저장하면서 그 값들을 가지고와서 계산한다. -> DP사용 1번 사용 : 5 2번 사용 : 55, 5+5=10, 5-5=0, 5*5=25, 5/5=1 3번 사용 : 555, 5+5+5=15, 5+5-5=5, 5+5*5=30, 5+5/5=6, 5-5+5=5, 5-5-5=-5, 5-5*5=-20, 5-5/5=4, 5*5+5=30, 5*5-5=20, 5*5*5=125, 5*5/5=5, 5/5+5=6, 5/5-5=-4, 5/5*5=5, 5/5/5=0, 555 + 1번사용->2번사용, 2번사용->1번 사용(중복은 제거) 4번 사용 : 555 + 1번사용->3번사용, 2번사용->2번 사용, 3번사용->1번 사용(중복은 제거) 코드 주의할 점 1. num_ls에 넣을 때, x-y, y-x를 동.. 더보기