일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 자바
- MySQL
- Spring Web MVC
- 코드스테이츠 백엔드
- 프로그래머스
- 재귀함수
- 싱글톤패턴
- 클라우드에서 도커 실행하기
- vm인스턴스생성
- Array.asList
- Spring MVC 구성요소
- java
- 인텔리제이
- 백준 11659
- 11659
- 성능테스트툴
- GCP
- 버블정렬
- Spring MVC 동작원리
- 코딩테스트
- OOP
- String.valueOf()
- 백준
- 투포인터알고리즘
- 구간합구하기
- 알고리즘
- 코드스테이츠
- 스택
- List.of
- 재귀와반복문
- Today
- Total
목록Problem Solving (149)
순간을 기록으로
문제 자연수 N을 입력하면 N!(팩토리얼)을 구하는 프로그램을 작성하세요 풀이 팩토리얼은 다음과 같습니다 5! = 5*4! = 5*4*3! =5*4*3*2! =5*4*3*2*1! =5*4*3*2*1*0! 0!은 1과 같으므로 결국 5!은 5*4*3*2*1과 같습니다. 구조를 보면 같은 과정이 반복되고 있음을 알 수 있습니다. 따라서 재귀함수로 팩토리얼 값을 구할 수 있습니다. 따라서 재귀함수안에 if-else 구조를 가지고 문제를 풀 수 있습니다. import java.util.Scanner; public class Main { public static int recursion(int n) { if (n==0) { // 0!이면 탈출 return 1; } else { return n * recursion..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bWolc6/btrz3QIR1lk/Dj2KbVlT91oZJTyE540iNk/img.png)
문제 10진수 N이 입력되면 2진수로 변환하여 출력하는 프로그램을 작성하세요. 단 재귀함수를 이용해야 합니다. 풀이 십진수를 이진수로 바꾸는 방법은 N을 2로 계속나누면서 몫과 나머지를 구하면 됩니다. 그리고 몫이 0이 될 때 구했던 나머지를 역순으로 붙이면 구하는 이진수가 나오게 됩니다. 위의 십진수 69를 계속 나눕니다. 그리고 몫이 0이 되면 지금까지 구한 이진수를 역순으로 이어붙입니다. 따라서 십진수 69의 이진수는 1000101이 됩니다. 이번 문제도 재귀함수를 이용하기 때문이 if-else 구조를 이용해서 문제를 풀겠습니다. package 인프런.재귀와트리와그래프.이진수출력.방법1; import java.util.Scanner; public class Main { static StringBui..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/HI1vK/btrz4NLIikA/Kxj1yYkkZ64asYObkmRkG0/img.png)
문제 자연수 N을 입력하면 재귀함수를 이용하여 1부터 N까지를 출력하는 프로그램을 작성하세요 풀이 재귀 함수를 이용해서 1부터 N까지 출력하면 문제를 해결할 수 있습니다. 재귀함수는 함수의 정의 안에서 다시 자기 자신(함수)을 사용합니다. 예를 들면 다음과 같습니다. f(n) = f(n-1) + 1. 재귀함수는 계속해서 자기 자신을 호출합니다. 그렇기 때문에 탈출 조건을 작성하지 않으면 무한루프에 빠져 스택오버플로우가 발생합니다. 스택에 저장된 호출함수의 정보가 끊임없이 생성되어 stack(스택에는 각 호출(스택프레임)마다 복귀주소, 지역변수, 매개변수가 누적됩니다)이 넘치기 때문입니다. 그렇기 때문에 재귀함수는 반드시 탈출조건을 작성해야 합니다. 재귀함수는 크게 다음과 같은 if-else 구조를 가집니..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dOYqVZ/btrzYEpztuz/kHc6zMFP5QlS7d4TUgKgik/img.png)
문제 풀이 정렬 기준은 다음과 같다 화학과 물리학을 가장 마지막으로 정렬한다. subject로 정렬한다 name으로 정렬한다 SELECT winner, subject FROM nobel WHERE yr=1984 ORDER BY subject IN ('Physics','Chemistry'), subject, winner
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bFcVYC/btrzUzhxNzs/t4vS9vr8ohZsl81tBnL1cK/img.png)
문제 풀이 이름(문자열)안에 single quote가 있을 때, 이 문자를 단순히 일반문자로만 취급하고 싶다면 앞에 singgle quote를 한번 더 작성하면 된다. select * from nobel where winner = 'EUGENE O''NEILL';
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bDEioz/btrzWsapEqv/xitdsA6HKpOqEXjKtodZK1/img.png)
문제 풀이 두 개의 배열이 주어지고 인덱스를 활용해서 풀 수 있는 문제이므로 투포인터 알고리즘을 사용하는 문제입니다. 투 포인터 알고리즘을 사용하라면 두 배열이 주어지고 정렬이 되어있어야 합니다. 이번 문제는 정렬이 되어있지 않아서 정렬을 해야 합니다. - 두 인덱스가 유효한 상태에서 반복을 계속합니다 - 만약 해당 인덱스의 두 원소가 값이 같으면 리스트에 넣고 두 인덱스 값을 1 증가합니다. - 만약 A배열의 원소가 더 크면 두 번째 배열의 인덱스를 1 증가시킵니다. - 만약 B배열의 원소가 더 크면 첫 번째 배열의 인덱스를 1 증가시킵니다. 이미 정렬을 한 상태이므로 리스트에는 오름차순으로 저장되어 있습니다. 따라서 반환만 해주면 됩니다. import java.util.ArrayList; import..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cJKStI/btrzYh68XVk/20BSmHxztrJ7ICOkYKivf1/img.png)
문제 풀이 단순하게 푼다면 두 배열을 입력받고 두 배열을 합친 다음에 정렬한 결과를 리턴할 수 있다. 하지만 이렇게 할 경우 시간 복잡도가 O(nlong)이 최선(퀵정렬)이다. 투 포인터 알고리즘을 사용한다면 시간 복잡도를 O(n)까지 낮출 수 있다. /* * 투포인터 알고리즘 --> 정렬(nlogn)보다 더 빠르다 O(n) * 정렬의 경우 빨라 봐야(퀵정렬) O(nlogn)인데 투포인터 알고리즘을 사용하면 O(n)으로 낮출 수 있다. * 두 개의 포인터를 사용해서 배열의 원소에 접근하는 알고리즘 * 포인터 역할을 하는 인덱스 변수 두 개를 선언해서 푼다. * * p1과 p2를 0으로 초기화한다. * * - p1
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/6wkg9/btrzTeXOl1F/chpKLkUaEMgtKgz2SIn7HK/img.png)
문제 풀이 알고리즘을 간소화하면 다음과 같다. /* * N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 수를 출력하는 프로그램을 작성하세요. * - n개의 자연수를 순차적으로 접근합니다. * - 자연수를 의 값을 뒤집습니다. * - 뒤집은 자연수가 소수인지 판별합니다. * - 소수이면 리스트에 담습니다. * */ 자연수 값을 뒤집기와 소수를 판별하는 task의 경우 함수로 따로 만들어 가독성을 올렸습니다. import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); i..