-
제네릭 타입의 컴파일 영향
사전학습 : Generic , 배열과 제네릭의 차이 Generic 재너릭이라는 용어는 포괄적인 이라는 뜻으로, 클래스 내부에 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 다이아몬드 표기법을 사용한다. (ex. ) 특징 같은 구조를 갖는 코드의 중복을 줄일 수 있다. 타입 안정성이 보장된다.(컴파일시 타입 체크가 가능하다) 타입 제한도 가능(extends, implement) 참조 타입(Wrapper Class)만 사용이 가능하다. 메소드 적용이 가능하다. 재너릭과 배열의 차이 1)재너릭은 불 공변, 배열은 공변 이다. 공변 = "자기 자신과 자식" 객체로 타입 변환을 허용해주는 것. 불 공변 ="자기 자신" 을 제외한 타입 변환이 허용되지 않는 것. __ 제너릭의 타입 안정성이 보장되는 원리..
JAVA
2021.04.10
-
[Ajax] status 200인데 parse error..?
status 200 에 parser error.. $.ajax({ url: type: data: JSON.stringify(date) , contentType: "application/json; charset=utf-8;", dataType: "json", success:function () { alert("추가 성공"); }, error: function (error,textStatus) { console.log(error); console.log(textStatus); } }) RestController 에서 @RequestBody 어노테이션을 이용하여 dto값을 받아 create 하는 경우에서 statuscode=200 으로 정의후 반환하였는데.. 서버에는 create가 되고있음에도 불구하고 cli..
spring Issue
2021.03.02
-
프로그래머스 - 알고리즘 공부
문제 설명 모든 문제를 풀수 있도록 알고력과 코딩력을 얻는데 걸리는 최소 시간을 구하는 문제이다. 주의사항 배열의 인덱스 범위 설정 최고 가질 수 있는 알고력과 코딩력은 최대 150이다. 그런데 내가 문제를 풀 때 150이상의 알고력 또는 코딩력을 얻을 수 있음을 유의해야 한다. 배열을 더 크게 잡거나 혹은 배열 범위를 넘어갈때 안쪽으로 다시 조절해줘야 한다. 다익스트라 풀이 주의사항 아마 효율성 부분을 통과할 수 없을 수 있다. 이부분은 우선순위 큐에 있는 쓸데없는 데이터들이 많아서 그런것일 수 있다. 하지만 또다른 에외도 존재한다. 정제를 안해줘서 가 아니라 코드가 좀 길어서 시간초과가 난다.. 스타일 차이인데 왜 시간초과가 나는지 모르겠다.. TRY 다이나믹 2022 테크 여름인턴십 코딩테스트 해설..
프로그래머스
2023.04.06
-
objectMapper의 역직렬화 예외 [IllegalArgumentException]
예외 내용 java.lang.IllegalArgumentException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`) 원인 및 해결 해당 객체에 일반적인 메소드를 GetXXXX로 작성한 것이 원인이였다. objectMappr는 생성자, getter에 관해 직렬화 역직렬화시 필요하기 때문에 해당 부분에 주의해야 한다.
issue's
2023.03.06
-
프로그래머스 - 점찍기
TRY [완전탐색] 거리 백터를 이용한 완전 탐색 FAIL [시간 초과] k가 1이고 거리제한(d)이 10만일 경우 n^2으로 시간 초과로 이루어짐. 풀이 [점과점 사이의 거리 공식을 이용] x를 정해버리고 y가 갈 수 있는 최댓값을 구한후 누적 카운팅함. 주의사항: 자료형의 범위 long 변수에 int 변수를 제곱하더라도 그 안에서는 overflow가 일어남. /** * note: 한칸식 전진하는 스텝은 4개 빼고 나머지 TLE 발생 * 풀이: 점과 점 사이의 거리 공식을 이용하여 x축을 구하고 거기에서 y축의 최대값을 구하여 그 안에서 배수의 개수로 나누어 구함. * - 즉, x를 정해버리고 y가 될 수 있는 수를 찾음. * @param k: 방향 백터 배수 * @param d: 원점과의 거리 제한 ..
Algorithm
2023.03.02
-
프로그래머스
2023.06.09
백준 - 파일 합치기3
문제 설명 파일을 모두 하나의 파일로 합치려고 한다. 단 파일을 합치는데 비용이 발생한다. a,b두개를 선택하여 합치면 각 값의 합으로 비용을 산정한다. 파일을 합칠 때 발생하는 최소비용을 구하는 문제이다. 주의사항 두 파일의 대한 값이 k개 백만개이고 각 요소의 최댓값은 만이다. 각 요소의 합이 백억까지될 수 있으므로 int자료형은 21억이라 overflow가 발생하니 타입에 주의해야 한다. 해당 문제에서 합치는 비용을 최소로 만들기 위해 작은 값끼리 먼저 더해가야 한다. 왜냐하면 이미 비싼 비용을 가진 파일이 점차 누적되기 때문에 큰 값은 계속 누적해서 더해가기 때문에 최소가 될 수 없다. 풀이 import java.util.Arrays; import java.util.PriorityQueue; im..
-
프로그래머스
2023.06.08
프로그래머스 - 과제 수행하기
문제 설명 과제를 진행하려 한다. 과제를 하던중 새로운 과제가 나오면 새로운 과제를 먼저 해야한다. 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춘 과제를 진행한다. 또한 멈춘 과제를 진행 중 새로운 과제가 출현하였을 때 새로운 과제를 먼저 해야한다. 그리고 멈춘 과제가 여러개일 경우 최근 멈춘 과제를 먼저 진행한다. 주의사항 과제는 시간순으로 정렬된 상태가 아니므로 정렬한다. 과제를 진행하고 다음 과제 출현 시간 사이에 자투리 시간이 있다면 멈춘과제를 수행해야한다. 즉, 멈춘 과제들을 모두 나중에 처리하는 것이 아님을 인지해야 한다. 여기서의 핵심은 자투리 시간의 과제를 수행해야 한다. 풀이 class Node{ String name; String startTime; int playTime; pub..
-
프로그래머스
2023.06.07
프로그래머스 - 요격 시스템
문제 설명 A나라가 B를 침략하기 위해 [s,e]까지 피해를 줄 수있는 미사일을 발포한다. B나라는 이 사실을 알고 A나라에서 발포한 미사일을 모두 격추 시키려 할 때, 최소한의 개수로 미사일을 격파시킬 수 있는 개수를 구하는 문제이다. 해당 문제는 한 점에서 최대 격추시킬 수 있는 미사일의 개수를 구하는 것이 핵심이다. 풀이 public int solution(int[][] targets) { Arrays.sort(targets,(a,b)-> { if(a[0] == b[0]){ return a[1]-b[1]; } return a[0] - b[0]; }); int answer=1; int end=targets[0][1]; for(int i=1; i
-
백준
2023.05.27
백준 - 우체국
문제 설명 각 마을들이 위치한 수직선 상에서 마을에 거주하는 각 사람들까지의 거리의 합이 최소가 되는 곳에 우체국을 건설하려고 할 때, 우체국을 세울 위치를 구하는 문제이다. 각 사람들까지의 거리의 합이 최소가 되는 곳에 우체국을 건설해야 하니 과반수가 넘는 인원에 대해서 최대한 가깝게 우체국을 건설하는 것이 좋다고 판단하였다. 우선 거리기반(오름차순), 인구수 기반(내림차순)으로 정렬한다. 하나씩 순회하면서 거쳐간 인원 인구수를 파악한 후 과반수 이상의 사람이 살고 있는 경우라면 해당 위치에 우체국을 건설한다. 단 원소의 값이 최소 + - 10억이므로 거쳐간 인구수에서 int 자료형은 이슈가 될 수 있으니 주의해야한다. 풀이 public static void main (String[] args) thr..
-
백준
2023.05.26
백준 - 꿀 따기
문제 설명 주어진 배열은 각 꿀의 양을 나타낸다. 벌 2마리 벌통 1개가 주어진다. 벌 2마리를 어느 위치에 위치시키고, 벌통을 벌2마리의 위치가 아닌 위치에 두면, 벌들이 벌통을 향해서 이동하게 된다. 단, 가는 길의 꿀을 따면서 간다. 이런 시스템으로 이동할 경우 벌들이 꿀을 딸 수 있는 가능한 최대 양을 구하는 문제이다. 처음 접근할 때 어떤 것을 고정시켜야 될까? 라는 질문에 답하지 못했다. 너무나도 애매했다. 왜냐하면 벌들의 위치와 꿀통의 위치에 따라 달라지는데, n^3 이 나온다고 생각했다. - 벌1,2 위치 선택 (n^2) - > 꿀통 위치 [i, n-1] (n) 그래서 시간초과가 분명하게 난다고 생각했다. 최대가 되는 경우를 생각해 볼때, “꿀벌 1 위치 < 꿀벌 2위치 시간초과 // 누적..
-
백준
2023.05.23
백준 - 항구
문제 설명 모든 화물을 크레인을 통해 옮기려고 한다. 크레인으로 모든 화물을 옮기는데 걸리는 최소 시간을 구하는 문제이다., 각 크레인은 최대로 화물을 올릴 수 있는 크기가 정해져 있다. 제한 범위 크레인의 총 개수 50 화물의 개수 10,000 가장 큰 화물을 들 수 있는 크레인이 가장 큰 적재화물을 드는 식이 최선이라고 생각했다. 크레인을 내림차순 적재 화물을 내림차순 주의사항 적재화물을 처음에 우선순위 큐로 소비하는 식으로 구현했다. 하지만 반례케이스가 존재했다. 크레인 = [10,8,1] 적재화물 = [10,8,7,1,1] - 단 2번 만에 옮김 수 있는 경우인데 적재화물 머리(7) 일 때, 다음 화물 1에서 크레인 1을 사용하여 옮길 수 있어 10,8,1을 걸리는데 1분이 걸리고 그다음 7,1,..
-
백준
2023.05.09
백준 - 톱니바퀴
문제 설명 톱니바퀴 4개가 주어진다. 톱니바퀴 하나를 회전화면 주의에 톱니바퀴가 돌아가게 된다. 주의의 톱니바퀴가 돌아가는 조건은 서로 맞물려있는 부분이 서로 다른 성질을 가지면 된다. 주어진 명령에 의해 해당 톱니바퀴를 돌리고 주어진 점수를 할당하여 점수를 구하는 문제이다. 1번 톱니바퀴의 12시방향이 N극이면 0점, S극이면 1점 2번 톱니바퀴의 12시방향이 N극이면 0점, S극이면 2점 3번 톱니바퀴의 12시방향이 N극이면 0점, S극이면 4점 4번 톱니바퀴의 12시방향이 N극이면 0점, S극이면 8점 풀이 맞물려있는 부분은 배열의 2번째 칸 6번째 칸이다. 하지만 맨 끝에 위치한 톱니바퀴는 왼쪽 또는 오른쪽에 아무것도 없다. 해당 문제에서 중요한 것은 전파이다. 전파력이 어디까지 도달할 수 있는지..
-
백준
2023.05.04
백준 - 철로
문제 설명 n명의 각 사람의 사무실 위치와 집 위치가 주어진다. 임이의 두점 A,B를 잊는 철로를 만들 떄 선분에 포함되는 사람의 수가 가장 많은 값을 출력하는 문제이다. 임의의 선분 L을 A=10, B=40일 때 4명의 사람이 포함되어 최댓값은 4가 된다. 풀이
-
백준
2023.05.02
백준 - 순회강연
문제 설명 강연날짜를 잡아 최대 수익을 얻을 수 있을 값은 무엇인지 구하는 문제이다. 단, 강연은 하루에 한번만 가능하다. 풀이 우선순위에 이익이 큰 순서대로 담고 현재 마감일자를 기준으로 강의를 담아낼 수 있는지 체크한다. 마지막 날짜에 최대한 큰 이익을 낼 수 있는 강의를 하는 것이 최대 수익을 얻을 수 있다. 만약 같은 데드라인을 가지게 되고 2번쨰로 큰 수익구조를 가지고 있다면 데드라인 -1 을 하며 강연이 비어있는 곳을 찾아낸다. 수익구조가 많으면 최대한 마감날까지 Lazy하게 미뤄야 최대 수익 구조를 가질 수 있게 된다. static class Node implements Comparable{ int profit,deadLine; public Node(int profit, int deadLin..
-
백준
2023.04.30
백준 - 문제집
문제 설명 가장 쉬운 문제부터 풀수 있는 과정을 출력하는 문제이다. 단, 문제마다 먼저 풀어야 하는 문제를 모두 풀어야 다음 문제를 풀어야 한다. 주의사항 문제는 난이도 순서로 출제되어 있다. 즉 1번 문제가 가장 쉬운 문제이고 N번 문제가 가장 어려운 문제가 된다. 이점을 생각하면 낮은 번호의 문제부터 풀어야 하므로 일반 큐가 아닌 우선순위 큐를 이용해야 한다. 풀이 public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(reader.read..
-
백준
2023.04.29
백준 - 가운데를 말해요
문제 설명 숫자를 입력 받을 때마다 중앙에 위치한 값을 출력하는 문제이다. min, max Heap 을 이용한다. maxHeap에는 작은 수를 min힙에는 큰 수를 넣어준다. (이름과 반대로 된 value들을 집어넣어준다.) 이렇게 minHeap에는 큰 값이 뒤로 밀려나고 maxHeap에는 작은값이 뒤로 밀리게 되면서 중앙값을 minHeap의 머리 또는 maxHeap 머리에 위치하게 된다. 그러면 이제 두 힙중에 어떤게 중앙값인지 선별해야 한다. 두 heap size()를 고르게 분포하기 위해 같은 Heap 사이즈를 갇는다면 max힙으로 몰아준다.(min으로 몰아줘도 상관없음) maxHeap이 더많다면 minHeap으로 이동한다. 이렇게 되면 maxHeap으로 이동한 혹시모를 큰수가 maxHeap에 머리..
-
프로그래머스
2023.04.25
프로그래머스 - 방의 개수
문제 설명 8가지의 방향 수가 입력으로 주어지고, (0,0)에서 출발하여 방향대로 움직여서 도형을 이루는 개수를 출력하는 문제이다. 도형이 만들어지는 경우는 해당 정점에 이미 다른 노드로부터 방문한 흔적이 있고 새로운 간선이 만들어지는 경우가 도형이 만들어지는 경우이다. (:= 사이클 형성) 주의사항 도형이 만들어지는 경우 엣지케이스가 존재한다. 교차점이 생성될 경우 이러면 도형은 위 아래 삼각형이 만들어지게 되는데 도형이 2개인지 1개인지 판별할 수 없게 된다. 맨 왼쪽 그림에서 해당 a로 다시 들어올때 방문했던 이력이 있고, 새로운 간선이 생겨 도형이 만들어졌다. 하지만 도형이 2개가 만들어 졌는지 1개가 만들어졌는지 알수 없다. 그래서 2배로 확대해서 보면 쉽게 2개가 만들어졌는지 1개가 만들어 졌..