전체 글 215

프로그래머스 - 포켓몬(Java)

이 문제를 풀때 가장 핵심이 되었던 알고리즘은 해시맵에서 키가 중복이 되면 안된다는 것이었다. 만약 키를 중복해서 해시맵에 삽입하면 키가 중복되어 추가되는 것이 아닌 value값만 갱신된다. 문제 이해 우선 포켓몬의 종류 갯수를 알아야한다. 이를 알기 위해서는 중복된 값을 제거하여 각 포켓몬의 수를 알아내면 되는데 나는 이 과정을 해시를 이용하여 해결하였다.  문제 해결  for(int i=0; i  이러면 중복이 제거된 상태의 배열을 해시 맵에서 얻을 수 있다.  여기서 해시맵의 크기는 중복이 제거된 포켓몬의 수를 뜻한다.  if(map.size()==(nums.length)/2){ answer=map.size(); } else if(map.size() 최대..

알고리즘/해시 2025.01.04

프로그래머스 - 프로세스(Java)

처음에는 LinkedList를 이용하여 해결하려고 했는데 쉽지 않았다.다른 사람들의 풀이를 확인해보니 우선순위 큐를 이용하여 쉽게 해결할 수 있다는 것을 알게 되었다. 우선순위 큐//낮은 숫자가 우선 순위인 int 형 우선순위 큐 선언PriorityQueue priorityQueueLowest = new PriorityQueue();//높은 숫자가 우선 순위인 int 형 우선순위 큐 선언PriorityQueue priorityQueueHighest = new PriorityQueue(Collections.reverseOrder()); 이 문제 에서는 우선순위가 높은 프로세스가 먼저 처리 되어야 하므로 높은 숫자가 우선 순위인 우선순위 큐를 사용해야 한다.PriorityQueue pq = new Prior..

프로그래머스 - 올바른 괄호(Java)

스택 관련된 알고리즘 문제를 풀어봤다면 아주 쉽게 풀 수 있는 문제이다. 구현 과정은 다음과 같다.문자열 순회여는괄호 "(" 가 나오면 스택에 push닫는괄호 ")"가 나오면 스택에서 pop()연산 수행 **(닫는 괄호가 나왔을때 스택이 비어있다는 말은 그 뒤로도 올바른 괄호를 만족하지 않으므로 바로 false 리턴)문자열 순회가 끝났을때 스택이 비어있으면 참, 스택이 비어있지 않으면 거짓 리턴import java.util.*;class Solution { boolean solution(String s) { boolean answer = true; Stack stack = new Stack(); int size = s.length(); ..

로그인 처리 - 서블릿 HTTP 세션,@SessionAttribute,세션 타임아웃 설정

HttpSession을 이용하여 로그인, 로그아웃 처리를 구현 해보았다. HttpSession을 사용하면 기존에 구현했던 로그인 로그아웃 처리를 더욱 쉽게 구현 가능하다. 서블릿을 통해 HttpSession을 생성하면  쿠키가 생성된다. 이때 쿠키의 이름은 JSESSIONID이고, 값은 추정 불가능한 랜덤값이 부여된다.  코드 public interface SessionConst { String LOGIN_MEMBER = "loginMember";}HttpSession에 데이터를 보관하고 조회할때 같은 이름이 중복되어 사용되므로 인터페이스를 활용하여 상수 정의  @PostMapping("/login")public String loginV3(@Valid @ModelAttribute LoginForm..

프로그래머스 - 기능개발(Java)

배열과 큐를 이용해서 해결 하였다. 변수 설명head ==> 탐색을 시작할 위치(처음에는 head 변수 없이 이미 배포가 된 작업에 대해서도 체크를 해줘서 시간 초과가 발생하였다.)tail ==> progresses 배열의 크기큐 ans ==> 배포된 갯수를 차례대로 삽입, poll() 함수를 이용하여 answer 배열에 복사import java.util.*;class Solution { public int[] solution(int[] progresses, int[] speeds) { int[] answer = {}; Queue ans = new LinkedList(); int head=0; int tail=progresses.length; ..

프로그래머스 - 같은 숫자는 싫어(Java)

Queue를 이용하여 해결한 문제이다. 알고리즘 설명1. arr[i]와 arr[i-1]을 비교하여 다르면 큐에 삽입하지만 이렇게만 하면 4, 4, 4, 3, 3일때 배열의 끝에 있는 3이 삽입이 안된다. 왜냐하면 다를때만 삽입하기 때문이다.따라서 변수 ex에 저장했던 숫자를 저장해두고 반복문의 마지막에 사용해야함 2. 배열의 마지막 숫자가 가장 최근에 삽입한 숫자와 다른 경우 ==> 큐에 삽입해준다. 3.큐에서 poll을 이용하여 차례대로 answer배열에 넣어준다. 4. answer 리턴import java.util.*;public class Solution { public int[] solution(int []arr) { int[] answer = {}; Queue q ..

백준 10845번 - 큐

큐도 마찬가지로 배열을 이용하여 해결했다. 큐의 특성상 선입 선출(FIFO)를 구현하기 위해 변수를 이용 하였다.tail  =  가장 최근에 push된 위치head = 가장 먼저 push된 위치 1 (head)234 (tail)  import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Scanner;public class Problem10845 { public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); int N =..

로그인 처리 - 세션 직접 만들어 보기

세션을 직접 개발하여 적용 해보았다. package hello.login.web.session;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Arrays;import java.util.Map;import java.util.UUID;import java.util.concurrent.ConcurrentHashMap;public class SesseionManager { public static final String SESSION_COOKIE_NAME = "mySessionId"; private..

로그인 처리하기 - 쿠키 사용

단순히 쿠키만을 이용하여 로그인, 로그아웃 기능을 구현 해보았다.  @PostMapping("/login")public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletResponse response) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(),form.getPassword()); log.info("login? {}", loginMember); if (loginMemb..

백준 10828번 스택

처음에는 Stack 클래스를 활용하여 쉽게 풀려고 했지만 시간초과가 발생하였다. 따라서 배열과 top 변수를 이용하여 간단하게 풀었다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Scanner;public class Problem10828 { public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); BufferedReader br = new BufferedReader(new InputStreamReader(..