# 크기가 작은 부분문자열 # 풀이 과정 이 문제의 핵심은 p의 길이가 최대 18임을 보고 Long 타입을 써야 한다는 것이다 처음에는 p와 t의 길이를 사용해서 반복하려면 어떻게 for문을 돌려야하는지가 헷갈렸다 t의 길이에서 p의 길이를 뺀 후 + 1 을 해주면 되었다 그런데 아무 생각없이 int형으로 선언해서 문제를 해결하려고 하니까 풀리지 않았다 문제를 다시 잘 보니 p의 최대 길이가 18이기 때문에 Long 타입을 써야했다 그거 말고는 substring 메소드와 Long.parseLong을 사용해서 String과 Long 사이의 타입 변환만 잘 해주면 되는 문제이다 # 정답 코드 class Solution { public int solution(String t, String p) { //p의 최..
알고리즘/Programmers
# 디펜스 게임 # 이 과정 브루트포스로 모든 경우의 수를 구한다면 쉽게 풀 수 있는 문제겠지만 이 문제에서 주어진 범위가 매우 크다 따라서 브루트포스가 아닌 다른 알고리즘을 사용해야 한다 최대 몇 라운드까지 방어가 가능한지를 구해야 하기 때문에 우선순위 큐를 사용해서 최대로 방어할 때의 값을 출력해주면 된다 # 정답 코드 import java.util.*; class Solution { public int solution(int n, int k, int[] enemy) { // 준호의 처음 병사 수 n // 사용 가능한 무적권의 횟수 k // 공격 병사 수 배열 enemy // 최대 몇라운드까지 방어 가능한지 구하기 int answer = enemy.length; Queue pq = new Priori..
풀이 방법 짝수일 경우와 홀수일 경우에서 주어진 조건대로 연산해준다. 그 과정을 거치면서 num이 1이 될 때의 answer를 출력해주는데 int의 범위에 신경을 써주어야 하는 문제였다. 틀린 코드 class Solution { public int solution(int num) { int answer = 0; int cnt = 0; while(true) { if(num == 1 ){ answer = 0; break; } //짝수일 때 if(num % 2 == 0 ){ num = num / 2; answer++; if(answer >= 500) { answer = -1; break; } if(num == 1) { break; } } //홀수일 때 if(num % 2 == 1) { num = (num * ..
풀이 방법 String은 == 이 아니라 equals 를 사용해서 비교해주는 것만 제대로 알면 바로 풀리는 문제다. 정답 코드 class Solution { public String solution(String[] seoul) { String str = "Kim"; String answer = ""; int idx = 0; for(int i=0; i
풀이 과정 a와 b의 크기를 비교해서 더해주기면 하면 쉽게 풀리는 문제였다. 정답 코드 class Solution { public long solution(int a, int b) { long answer = 0; if(a < b) { for(int i=a; i b) { for(int i=b; i
풀이법 틀린 코드 import java.util.*; class Solution { public boolean solution(int x) { //각 자리수를 나누어 더하기 //더한 수로 x를 나누기 boolean answer = false; //각 자리수를 나누어 더한 합 int sum = 0; //x값 잠시 가져다 쓸 변수 int temp = x; //자리수를 나누어 저장해 줄 리스트 List list = new ArrayList(); while(x != 0) { list.add(temp%10); temp = temp / 10; } for(int i=0; i
풀이법 n이 양의 정수 x의 제곱인지 아닌지 판별하여 제곱이라면 x+1의 제곱을 반환한다. 제곱인지 아닌지 찾기 위해서 for문을 돌려서 판별해 보았지만 테스트 케이스에서 틀린 것이 있었다. 풀이법을 고민하다가 sqrt 와 pow 를 사용하여 문제를 풀면 쉽게 풀린다는 것을 알게 되었다. 정답 코드 class Solution { public long solution(long n) { //sqrt를 사용하여 제곱근으로 바꾸고 //pow로 제곱을 했을 때 n이면 n+1의 제곱 리턴 if(Math.pow((int)Math.sqrt(n), 2) == n) { return (long)Math.pow(Math.sqrt(n)+1, 2); } return -1; } } sqrt와 pow를 적절하게 사용하면 쉽게 풀리는..
풀이법 정수 long을 입력 받고 가장 큰 숫자부터 차례대로 내림차순 정렬한 후 출력한다. long을 배열에 넣고 정렬하면 시간 초과가 날거 같아서 어떤 식으로 풀어야 하는지 고민하였다. long n을 String 으로 바꾸어 배열에 넣는다. 배열을 내림차순으로 정렬한다. StringBuilder를 사용하여 하나씩 추가한다. 그리고 다시 Long으로 형변환 후 출력한다 틀린 풀이 import java.util.*; class Solution { public long solution(long n) { //% 와 / 를 이용해서 //n을 뒤에서부터 하나씩 자른 후 list에 추가 //n의 자리 수 뒤에서부터 줄여나가기 List list = new ArrayList(); long answer = 0; Stri..