분류 전체보기
-
[LeetCode/JAVA] 1. Two SumETC/Algorithm 2023. 8. 31. 22:51
문제 배열 nums가 주어지는데 이 요소들을 중복하지 않고 한 번만 사용해서 target이라는 값을 만드는 문제이다. 풀이 해쉬맵을 사용해서 target의 값과 nums[i]의 값의 차이를 조회해서 만약 존재한다면 그 값이 정답이다. 하지만 해쉬맵이 초기에는 비어있으므로 존재하지 않다면 put을 통해 해쉬맵에 내용을 저장해주면서 반복하다보면 O(N)만에 정답을 구할 수 있게 된다. 코드 class Solution { public int[] twoSum(int[] nums, int target) { HashMap hmap = new HashMap(); for (int i = 0; i < nums.length; i++) { if (hmap.containsKey(target - nums[i])){ return..
-
[LeetCode/JAVA] 155. Min StackETC/Algorithm 2023. 8. 31. 22:24
문제 Stack 자료구조의 push, pop, top을 디자인하고, 최소 요소를 조회를 할 수 있게 하는 문제이다. 풀이 기본적으로 JAVA에서 주어지는 자료구조를 사용하여 풀이를 진행하려했다. 하지만 최소값이 문제였다. getMin()을 사용하면 최솟값을 반환하는데, pop() 메소드는 가장 위에 있는 요소를 꺼내버리기 때문에 만약 pop() 한 대상이 최솟값이라면 getMin() 메소드를 할 때 반환할 최솟값을 다시 설정해줘야했다. push를 할 때 최소값을 판단하고 만약 최소값이라면 2번 푸쉬해준다. 아니라면 1번 푸쉬해준다. 이후 pop()을 진행할 때 최솟값과 비교한 뒤, 만약 최소값이라면 한번 더 pop() 메소드를 사용해서 최솟값을 변경해주는 과정을 진행해서 해결하였다. 코드 class Mi..
-
[LeetCode/JAVA] 125. Valid PalindromeETC/Algorithm 2023. 8. 27. 23:47
문제 모든 대문자 문자열을 소문자로 변경하고 영문, 숫자가 아닌 문자는 모두 제거한 문자열이 펠린드롬 문자열이라면 참을 반환하고 아니라면 거짓을 반환하는 문제이다. palindrome 펠린드롬이란? 앞 뒤를 뒤집어서 읽어도 똑같은 문장을 말한다. 풀이 일단 문자열에 필요없는 특수문자, 띄어쓰기 등을 없애야 원하는 문자열을 만들 수 있다고 판단해서 정규식을 사용해 문자열을 변환해준 다음, 소문자만 비교해야하기 때문에 toLowerCase() 메소드를 사용해서 전체 문자열에 대문자를 없애줬다. 펠린드롬의 경우 문자열을 뒤집어서 비교를 진행하고 서로 다른지 비교를 해야했는데, String 클래스의 길이를 사용하여 구현할 까 생각했지만 StringBuilder 클래스를 사용하면 reverse() 메소드로 간단하..
-
[LeetCode/JAVA] 80. Remove Duplicates from Sorted Array IIETC/Algorithm 2023. 8. 24. 17:38
문제 감소하지 않는 순서로 정렬된 정수형 배열 nums가 주어지는데, in-place 방식으로 중복을 제거해야한다. 중복의 최대 허용 개수는 2개 이고, 관계대로 정렬을 유지해야한다. 풀이 중복이 2개까지 허용인점과 순서가 정렬되어있다는 점을 고려해서, 인덱스 1부터 시작하면서 앞의 값과 비교를 한다. 여기서 먼저 중복된 개수를 수정하고, 수정된 결과에 따라 배열의 요소를 변경해준다. class Solution { public int removeDuplicates(int[] nums) { // 시작위치는 1 int pos = 1; // 중복 횟수를 체크할 변수 int sameCount = 0; for(int i = 1; i < nums.length; i++){ // 만약 중복 된 수라면 sameCount..
-
[LeetCode/JAVA] 26. Remove Duplicates from Sorted ArrayETC/Algorithm 2023. 8. 24. 16:30
문제 감소하지 않는 순서로 정렬된 정수형 배열 nums이 주어지고, 이전 풀이와 같이 in-place 방식으로 중복된 요소들을 제거해야 한다. 또한 각각의 고유한 요소는 한 번만 나와야한다. 그리고 이미 만들어져있던 순서대로 감소하지 않는 관계를 유지해야하고, 반환값으로 고유한 요소의 길이를 반환해야한다. 풀이 시작 인덱스 0부터 시작해서 일일이 비교한 다음 다른 값이 나오게 된다면 그 때 다른 값을 순서대로 앞으로 당겨서 넣어주면 될 것이다. 이전 LeetCode 문제들과 비슷한 유형이다. 코드 class Solution { public int removeDuplicates(int[] nums) { // 시작 인덱스는 0부터 시작한다. int pos = 0; // nums 배열의 전체를 일일이 반복한다..
-
[LeetCode/JAVA] 27. Remove ElementETC/Algorithm 2023. 8. 23. 16:20
문제 배열 nums와 정수 val이 주어지고, nums 배열안에 존재하는 val 값을 전부 제거해야하는데 "in-place" 방식으로 제거해야한다고 한다. 배열 정렬은 바뀌어도 된다고하고, val 값과 같지 않은 nums 배열의 요소 길이를 반환하라고 한다. 여기서 in-place 방식이 뭐지? 정확한 의미를 찾아봤다. 자료 구조를 추가로 사용하지 않고 입력을 변환하는 알고리즘 이라고 하는데, 그럼 nums라는 배열을 그대로 사용해서 val과 같은 값을 제거하고 결과로 남은 유효한 배열의 길이를 반환해야겠다고 생각했다. 풀이 가장 먼저 val과 같은 값을 전부다 비교해야할 것이다. for문을 통해서 0번 째 인덱스 부터 반복문을 진행하고, 반복을 진행했을 때 val과 관련이 있다면 nums 배열에서 사..
-
[LeetCode/JAVA] 88. Merge Sorted ArrayETC/Algorithm 2023. 8. 22. 22:35
문제 감소하지 않는 순서로 정렬된 배열 nums1과 nums2이 주어지고, 각각의 배열에서 유효한 요소의 개수를 나타내는 m과 n이 주어진다. 그리고 이 배열을 감소하지 않는 순서로 하나의 배열로 합쳐야한다. 최종적으로 배열은 함수에 의해 반환되지 않고 배열 nums1 내부에 저장되어야하며, nums1의 길이는 m+n이 되어야한다. m은 합쳐져야하는 요소의 수를, n은 0으로 설정되어있다면 무시해야한다. nums2의 길이는 n을 가진다. 일단 전체적인 내용으로 nums1이란 배열에 정렬해서 저장을 해야하고, 길이는 m+n이 되게 해야한다는 것 같다. 그렇다면 마지막 문장의 의미는 무엇일까? 문제의 예시 2번에서는 nums2의 길이 n=0이라면 nums2는 비어있는 배열이고, 예시 3번에서는 nums1의 ..
-
[Spring Boot] mockMvc를 통해 담겨오는 HttpOnly Cookie 내용물 검증하는 테스트 코드 작성법Spring/Study 2023. 7. 23. 23:10
JWT 토큰을 사용하여 로그인을 하면 Access토큰과 Refresh토큰을 응답으로 주는데, 이때 Refresh토큰을 HttpOnly 쿠키로 전달하는 상황이다. 프론트 측에서는 담겨오는 쿠키를 임의로 설정할 수 없으므로 좀 더 보안에 유리하다고 생각한다. 개발 단계에서 이를 검증하기 위해서 mockMvc를 통해 테스트 코드를 작성하는데 body에 담겨오는 값들은 jsonPath를 통해 검증을 진행할 수 있지만, 헤더에 담겨오는 HttpOnly 쿠키는 따로 옵션이 설정되어 값 + 옵션 값까지 동시에 전달된다. 그렇다면 테스트 코드를 어떻게 작성을 해야 하는가? 에 대한 해결 방법이다. 가장 먼저 테스트 코드는 given when then 패턴으로 작성하였다. when까지의 패턴 코드이다 when 까지의 코..