java 355

[프로그래머스 코딩테스트] 다음 큰 숫자(Java)

문제 설명 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다. 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다. 예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다. 자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. 제한사항 n은 1,000,000 이하의 자연수 입니다. 입출력 예 n result 78 83 15 23 class Solution { public int solution(int n) { int answer..

[Spring] 6. 요청 파라미터(request parameter)

요청 파라미터(request parameter)란 클라이언트에서 서버로 전송되는 값을 의미합니다. 요청 파라미터의 종류에는 요청 쿼리 스트링(GET) 또는 요청 본문(POST)으로 보내지는 값처럼 뷰에서 입력한 값이나 선택 값, 숨김 파라미터로 전송된 값 등이 있습니다. 또는 뷰에서 클릭한 버튼의 name의 속성 값, URL 경로의 일부로 보내지는 값 등이 있습니다. 이를 취득하는 방법은 다음과 같습니다. @RequestParam Form 클래스 내용 어노테이션을 이용하여 파라미터를 하나씩 취득 스프링 MVC가 Form 클래스 내의 필드에 대해 값을 저장 상황 하나의 뷰에 버튼이 여러 개 있을 때 어느 버튼이 클릭되어 요청이 보내졌는지 식별 요청 파라미터를 모아 하나의 객체로 받아들임 장점 간편하고, 각..

Java/Spring 2023.06.20

[자료구조] 데크(Deque)

데크(Double-ended Queue; Deque)란 양쪽 끝에서 삽입과 삭제를 허용하는 자료구조입니다. 스택과 큐 자료구조를 혼합한 자료구조라고 할 수 있습니다. 예를 들어 스크롤, 문서 편집기 등의 undo 연산, 웹 브라우저의 방문 기록 등에 사용됩니다. 웹 브라우저 방문 기록의 경우, 최근 방문한 웹 페이지 주소는 앞에 삽입하고 일정 수의 새 주소들이 앞쪽에서 삽입되면 뒤에서 삭제가 수행됩니다. 데크를 배열이나 이중 연결 리스트로 구현한 경우, 스택과 큐의 연산 수행 시간과 같습니다. 하지만 양 끝에서 삽입과 삭제를 할 수 있으므로 프로그램이 복잡해집니다. 자바는 java.util 패키지에서 Deque 인터페이스를 제공하며 이는 Queue에서 상속됩니다. 주요 메소드 삽입 addFirst(): ..

Java/자료구조 2023.06.20

[프로그래머스 코딩테스트] 이진 변환 반복하기(Java)

문제 설명 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다. 예를 들어 x = "0111010"이라면, x에 이진 변환을 가하면 x = "011101" -> "1111" -> "100"이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요. 제한사항 s의 길이는 1 이상 150,000 이하입니다. s에는 '1'이 최소 하나 이상 포함되어 있습니다. 입출력 예 s ..

[프로그래머스 코딩테스트] N개의 최소공배수(Java)

문제 설명 두 수의 최소공배수(Least Common Muliple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. 제한사항 arr은 길이 1이상, 15이하인 배열입니다. arr의 원소는 100 이하인 자연수입니다. 입출력 예 arr result [2, 6, 8, 1, 14] 168 [1, 2, 3] 6 class Solution { static int gcd (int a, int b) { if (a % b..

[자료구조] 큐(Queue)

큐(Queue)란 선입선출(FIrst In First Out; FIFO), 먼저 들어온 데이터가 먼저 나가는 구조입니다. 단방향에서의 삽입과 삭제가 가능한 스택과 달리, 삽입과 삭제가 양 끝에서 각각 수행되는 자료구조입니다. 관공서, 은행, 우체국, 병원 등에서 번호표를 이용한 줄서기가 대표적인 큐의 예시입니다. 큐는 선형 자료구조이므로 1차원 배열 또는 단순 연결 리스트로 구현합니다. 그러나 배열로 구현하는 경우 삽입과 삭제를 거듭하면 큐의 항목이 배열의 오른쪽 부분으로 편중되는 문제가 발생합니다. 새 항목은 뒤에 삽입되고 삭제는 앞에서 일어나기 때문입니다. 이를 해결하는 방법 중 하나는 큐의 항목을 배열의 앞부분으로 이동시켜 배열의 마지막 원소가 첫 원소와 맞닿아 있도록 구현하는 것입니다. 연결 리스..

Java/자료구조 2023.06.18

[알고리즘] 다이나믹 프로그래밍(Dynamic Programming)

다이나믹 프로그래밍(Dynamic Programming)이란, 계산된 결과를 기록하고 재활용하여 문제의 답을 구하는 알고리즘입니다. 큰 문제를 부분 문제로 나눈 후 답을 찾아가는 과정에서 중간 계산 결과를 기록하기 위한 메모리를 필요로 합니다. 한 번 계산한 부분을 다시 계산하지 않아도 돼서 속도가 빠르다는 장점이 있습니다. 동적 계획법이라고도 불립니다. 다이나믹 프로그래밍에는 타뷸레이션(Tabulation)과 메모이제이션(Memoization) 두 가지 방법이 있습니다. 먼저 타뷸레이션은 하위 문제부터 풀면서 올라가는 상향식 접근 방법으로, 모두 계산하면서 차례대로 진행합니다. 반대로 메모이제이션은 큰 문제에서 하위 문제를 확인해가며 진행하는 하향식 접근 방법으로, 계산이 필요한 순간 계산하면서 진행합..

알고리즘 2023.06.18

[프로그래머스 코딩테스트] 문자열 내 마음대로 정렬하기(Java)

문제 설명 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준을 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 제한사항 strings는 길이 1 이상, 50 이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100 이하인 문자열입니다. 모든 strings의 원소의 길이는 n보다 큽니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 입출력 예 strings n return ["sun", "b..

카테고리 없음 2023.06.18

[알고리즘] 분할 정복(Divide and Conquer)

분할 정복(Divide and Conquer)이란 큰 문제를 작은 부분 문제로 나누어 해결하는 알고리즘입니다. 예를 들어 합병 정렬, 퀵 정렬, 이진 검색 등이 있습니다. 분할 정복은 세 가지 과정으로 이루어집니다. 문제를 하나 이상의 작은 부분들로 '분할'하고, 부분 문제를 해결하여 '정복'하고, 부분에서 해결한 문제를 '조합'하여 원래 문제의 답을 구하는 것입니다. 이는 재귀함수를 이용하여 구현할 수 있습니다. 문제를 나누어서 처리하기 때문에 어려운 문제도 해결할 수 있고, 병렬 처리에 이점이 있다는 장점이 두드러집니다. 그러나 재귀 호출 구조를 이용하기 때문에 잦은 분할 시에는 메모리를 많이 사용하거나 동작이 느려질 수 있다는 단점이 있습니다. 분할 정복 구현 코드(최댓값 찾기) public sta..

알고리즘 2023.06.17