실행시간 단축 방법보통의 지문 : 자연수 N과 M이 주어졌을 때 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 순열을 구하라. 1. StringBuilder 로 결과 출력하기 2. 백트래킹 하면서 순열 결과값을 저장하는 변수를 Array로 사용하기 2-1. 왜 그럴까? Array를 사용하면 Array의 cnt 인덱스에 값을 계속 갱신하기 때문에 ArrayList 를 사용할 때 필요한 list.remove(list.size()-1); 의 과정이 필요없다. 3. (특정 문제상황) input에 대해 중복을 제거하는 과정을 거쳤다면, 만들어진 comb에 대해 중복을 검사하는 과정은 필요없다. 3-1. 이미 input에서 중복 원소를 제거했기 때문에 만들어지는 순열에는 중복된 순열이 존재할..
https://softeer.ai/practice/6257/history?questionType=ALGORITHM Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai처음 생각한 풀이과정은 for문을 세 번 쓰는 것 이었는데, O(n^3)이어서 시간초과가 발생하는 로직이었습니다.풀이과정i=0 을 기준으로 둡니다.이때 배열의 끝에서 부터 비교해야 시간복잡도를 줄일 수 있습니다.1과 3은 arr[0] 의 값 4보다 작으므로 1씩 누적해줍니다. 그 다음 원소 5는 arr[0] 보다 큽니다. 따라서 1을 누적하지 않고 그대로 2를 입력합니다.또한 arr[0]보다 5가 크기때문에, 스택정렬을 수행할 수 없는 경우 입니다.answer 에 누적된 값 2를 누적해줍니다. 그 다음 원소 2는 arr[..
https://softeer.ai/practice/6275/history?questionType=ALGORITHM Softeer - 현대자동차그룹 SW인재확보플랫폼 softeer.ai 풀이과정전체적인 풀이1. 탐색 경로의 시작점, 시작 방향 찾기2. 찾은 방향으로 dfs탐색하기2-1. 현재 방향으로 두 칸 이동할 수 있는지 확인2-2. 오른쪽으로 회전 시킨 뒤, 두 칸 이동할 수 있는지 확인2-3. 왼쪽으로 회전 시킨 뒤, 두 칸 이동할 수 있는지 확인 자세한 풀이시작점이 될 수 있는 좌표1. "#" 인 문자열2. 상, 하, 좌, 우 "#" 문자열이 하나 있어야 함 (두 개 이면 안됨) 위 두 가지 특징을 활용해서 모든 좌표에 대해 탐색하며 시작점을 찾았습니다.static void find_start(..
https://school.programmers.co.kr/learn/courses/30/lessons/214288 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이과정1. 유형 별 멘토의 숫자 조합을 다 구하기 (완전탐색) 1-1. 이때 n은 최대 20이며 k는 최대 5입니다. 아래 설명에 정리를 해놓았는데 n-1개(19)에서 k-1개(4)의 조합을 뽑는 모든 경우는 3,876개 입니다. 1-2. reqs의 길이는 최대 300이므로, 모든 조합에서 지연시간을 계산하는 경우는 3876*300 =1,162,800 입니다. 1-3. 즉 완전탐색 ..
https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr풀이과정1. 큐에 트럭을 올리기1-1. 올라갈 수 있으면 트럭의 무게를 offer1-2. 올라갈 수 없으면 0을 offer (가상의 트럭)2. 큐에서 트럭 빼주기큐의 size가 bridge_length와 같아진다면, 제일 앞의 큐는 다리를 건너갈 수 있므로 q.pollFirst()로 큐에서 빼줘야 합니다.3. truck_weights배열의 마지막 인덱스 트럭 고려하기마지막 인덱스 트럭을 큐에 넣는 경우..
알게된 점1. @RequestParam을 통해서 받을 수 있는 데이터Query StringForm 형식 데이터 (html form)멀티파트 데이터 : multipart/form-data 형식의 요청에서 폼 필드의 데이터를 추출할 수 있음위 세가지를 다 받을 수 있습니다. 2. @RequestBody는 변환과정, @ModelAttribute은 맵핑과정@RequestBodyJSON, XML, Text등의 데이터가 적합한 HttpMessageConverter을 통해 파싱되어 Java 객체로 변환 됩니다.@RequestBody를 사용할 객체는 바인딩을 위한 생성자나, setter메서드가 필요 없습니다.단, 직렬화를 위해 기본 생성자와 데이터 바인딩을 위한 getter나 setter 중 1가지는 정의되어야 합니다..
로깅이 왜 필요할까?배포환경에서 동작 상태를 확인하기 위해서 필요합니다.기존의 System.out.println(), System.err.println()과 같은 플로우로는 한계가 있습니다.로깅이 기록하는 두 가지 사항서비스 동작 상태장애(exceptino || error)로깅 프레임워크SLF4JLogbackLog4jnlogSystem.out.println()보다 좋은 점출력 형식을 지정할 수 있음로그 레벨을 설정하여 남기고 싶은 로그를 별도로 지정할 수 있음개발 서버에서는 모든 로그를 출력하고, 운영서버에서는 출력하지 않는 등 로그를 상황에 맞게 조절할 수 있다콘솔 뿐 아니라, 파일이나 네트워크등 로그를 별도의 위치에 남길 수 있음성능도 System.out.println()보다 좋음!로그레벨(Fatal..
문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/250136# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이과정각 열 마다 하나씩 아래로 내려가며 탐색을 수행합니다. 이때 이미 계산 된 영역은 다시 계산하지 않기 위해 메모리제이션을 해줘야 합니다. 메모리제이션을 위해 영역벌 번호를 할당하고 HashMap을 활용해 그 크기를 저장했습니다. 메모리제이션1. 석유인 영역(1)을 만나게 되면, 해당 영역의 크기를 bfs로 확인합니다. 이때, 영역별 번호 (저는 -1,-2,-3 ... 음수로 표..