일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 재귀와반복문
- Array.asList
- 백준
- Spring Web MVC
- 백준 11659
- 11659
- java
- 코딩테스트
- MySQL
- 코드스테이츠 백엔드
- 인텔리제이
- 성능테스트툴
- OOP
- 재귀함수
- GCP
- 구간합구하기
- Spring MVC 동작원리
- Spring MVC 구성요소
- 스택
- 투포인터알고리즘
- 싱글톤패턴
- 프로그래머스
- String.valueOf()
- 클라우드에서 도커 실행하기
- vm인스턴스생성
- 버블정렬
- List.of
- 자바
- 코드스테이츠
- Today
- Total
목록Problem Solving (149)
순간을 기록으로
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VYPlW/btrzSy22T14/RIm6TggyGvpzNd6oCrlhK1/img.png)
문제 풀이 1 - 사용한 문자를 기록하기 앞에서 사용했던 문자들을 기록할 배열을 만들고 새로운 문자들을 붙일 때 앞에서 나온 적이 있는지 검사하는 알고리즘입니다. import java.util.ArrayList; import java.util.Scanner; /* * 소문자 한 개 문자열이 입력되면 중복된 문자가 제거되고, 순서를 유지하는 문자열을 출력하세요. * - 문자열을 각 문자씩 앞에서부터 접근합니다. * - 문자에 접근하고 앞에서 나온적이 있는지 검사합니다. * - 나온적이 없으면 문자를 붙이고, 나온적이 있으면 통과합니다. * */ public class Main { public static String solution(String str) { ArrayList usedLetters = new..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bUJUej/btrzQpdSS9N/CQFKhqY9Oaw2GwWrEtxjnK/img.png)
문제 풀이 1 - 시간 초과 (직관적인 방법) 소수란 1과 자기 자신으로만 나누어 떨어지는 수입니다.(=다른 수 나머지 연산을 했을 경우에 나머지가 0이 나오면 안 되는 수) 숫자 x를 소수인지 확인하려면, 2부터 x/2까지 수로 나머지 연산을 시도해서 나누어 떨어지는 지 검사하면 됩니다. 나누어 떨어지면 소수가 아닙니다. /* * N을 입력하면 1부터 N까지 수 중 소수의 갯수를 출력하는 문제 * * * */ import java.util.Scanner; public class Main { public static int solution(int n) { int count = 0; for (int i=2; i
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bCYv4N/btrzMa92MF1/iJIQRJh2QHgNCAk3pMex70/img.png)
문제 풀이 항 수를 입력하면 그만큼의 항을 가지는 피보나치수열을 출력하는 문제입니다. 피보나치 수열이란 앞선 두 개의 항을 더해서 새로운 항의 값을 가지는 수열입니다. 그렇기 때문에 첫 항과 두 번째 항의 값을 설정해 주어야 합니다. 소스코드 /* * 항 수를 입력하면 그만큼의 항 수를 가지는 피보나치 수열을 출력하세요. * */ import java.util.Scanner; public class Main { public static int[] solution(int n) { int[] fibo = new int[n]; // 초깃값 설정 fibo[0] = 1; fibo[1] = 1; // 현재 원소 값 = 앞의 두 원소 값의 합 for (int i=2; i
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/llpHG/btrzOGmHnXg/qfI04DMhkn9mV9S9FWaK8K/img.png)
문제 풀이 가위바위보를 할 경우 상황은 크게 3가지로 나눌 수 있습니다. 1.A가 이긴 경우 2.B가 이긴 경우 3. 무승부인 경우 A가 낼 수 있는 경우의 수는 3가지이고 B도 마찬가지 이므로 총 9가지 경우의 수가 나올 수 있습니다. 그리고 이 9가지 경우의 수를 3으로 나누면 각각의 상황마다 경우의 수는 3가지입니다. 가위, 바위, 보를 숫자 1,2,3으로 매핑하여 문제를 풀지만 가독성을 올리기 위해 대문자로 지어진 상수를 만들었습니다. 소스코드 import java.io.IOException; import java.util.Scanner; /* * - n 횟수만큼 반복합니다. * - 만약 A가 이긴다면 'A'를 배열에 담습니다. * - A(가위,1)이고 B(보,3) 일 때 * - A(바위,2)이고..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cXbWHy/btrzL9XjgjU/tItDjHgNfjSUuKs9jIQdj1/img.png)
문제 풀이 선생님이 N의 학생을 일렬로 세웠을 때, 맨 앞에 있는 선생님이 볼 수 있는 학생의 수를 구해야 하는 문제입니다. 특정 한 학생이 선생님에게 보이는지 안 보이는지 판단할 수 있는 기준은 다음과 같습니다. 그 학생의 키가 앞 학생들 중 가장 큰 키보다 크면, 선생님은 해당 학생을 볼 수 있습니다. 따라서 이러한 기준을 가지고 문제를 풀겠습니다. 예외적으로 첫 번째 학생의 경우 앞의 학생이 없기 때문에 반드시 보이게 됩니다. 따라서 count 변수 초깃값을 1로 설정하고, max 변수 초깃값도 첫 번째 학생의 키로 설정합니다. 입력을 보면 최대 100,000명의 학생이 입력 될 수 있습니다. 입력이 많을 경우에는 Scanner 보다 BufferedReader를 사용하여 입력의 성능을 올릴 수 있습..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Sv9ox/btrzKRioeYN/dZrKPEdcjrzulw8LnFNZTk/img.png)
문제 풀이 입력으로 받은 배열의 원소 중 원소 값이 자신의 바로 앞 원소 값보다 큰 원소를 출력하는 문제다. 예외상황이 있다면 첫 번째 원소는 앞 원소가 없기 때문에 무조건 출력을 해야 한다. solution 함수 안에서 결과를 출력할 수도 있지만 ArrayList 형으로 반환해서 메인 함수에서 출력하도록 코드를 작성했다. 알고리즘은 다음과 같다. - 매개변수로 입력받은 배열의 첫 원소를 리스트에 담습니다. - 반복문을 사용하여 두 번째 원소부터 마지막 원소까지 접근하여 앞 원소와 비교하여 값이 크면 리스트에 담습니다. 소스코드 import java.util.ArrayList; import java.util.Scanner; /* * N개의 정수를 입력받아 자신의 앞 수보다 큰 수를 출력하세요. * - 첫..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/V1GBY/btrzQH5QM6e/1JocEdUiv0BO6I1JFGlmkk/img.png)
문제 풀이 문자열을 뒤집는 문제. 알파벳일 때만 뒤집으라는 제약조건이 있기 때문에 reverse() 메소드를 이용하기 보다 직접 문자를 뒤집는 방법이 낫다. import java.util.Scanner; public class Main { public static String solution(String str) { char[] chars = str.toCharArray(); int leftIdx = 0; int rightIdx = chars.length-1; while(leftIdx < rightIdx) { // 왼쪽 문자가 특수문자인 경우 if (!Character.isAlphabetic(chars[leftIdx])) { leftIdx++; } // 오른쪽 문자가 특수문자인 경우 else if (!C..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bjjalM/btrzMJcxHXw/zKiIsZ0ZhpsM1Dn672pqU1/img.png)
문제 풀이 1 - StringBuilder의 reverse() 이용하기 String에는 문자열을 거꾸로 뒤집는 메소드가 없습니다. 그래서 문자열을 뒤집고 싶으면 StringBuilder로 변환하여 reverse() 메소드를 사용하고 다시 문자열로 변환하면 됩니다. import java.util.Scanner; public class Main { public static String[] solution(int n, String[] str) { String[] reverseWords = new String[n]; // 뒤집은 문자열을 담을 배열 StringBuilder sb; for (int i=0; i