[프로그래머스,Level 1] K번째 수(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
-첫 풀이 및 정답풀이 이 문제 역시 체육복 문제와 비슷하게 그냥 문제에서 주어지는 조건만 잘 지켜준다면, 쉽게 풀 수 있는 문제였다. 그러나 필자의 풀이와 다르게 Arrays.copyOfRange() 메서드를 활용해 더욱 짧게 푼 사람들의 풀이 역시 존재하니까 많이 참고하는 게 좋을 것 같다. (다른 사람의 풀이이므로 블로그에 직접 게시하지 않으니 문제에서 제공되는 링크에서 확인 바란다.) import java.util.ArrayList; import java.util.Arrays; class Solution { public ArrayList solution(int[] array, int[][] commands) { // 1. 정답을 담아 반환할 ArrayList. ArrayList answer = n..
[프로그래머스,Level 1] 체육복(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 이 문제는 특별한 알고리즘보다는 그냥 있는 조건에 맞게 코딩하면 풀 수 있는 문제이다. 필자는 체육복 개수를 카운팅 하는 1차원 배열을 n+2 크기만큼 선언해 주었다. 그 이유는 기본적으로 체육복을 앞, 뒤 사람에게만 빌릴 수 있는데 이를 구현하는 과정에서 인덱스 범위 에러와 코드 자체가 복잡하다고 생각되어서 이다. 자세한 풀이는 코드를 통해 확인하자. import java.util.Arrays; class Solution { public int solution(int n, int[] lost, int[] reserve) { int answer = n; // 1. 체육복 개수 배열. int check[] = new int[n+2]; // 2. 체육복이 없는 학생 수. int te..
[프로그래머스,Level 1] 시저 암호(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 이 문제는 n의 값에 따라 문자열의 각 문자들이 변해야 하기 때문에 아스키코드가 중요하다는 것을 알 수 있다. 모든 아스키코드값을 알 수 없기 때문에 필요할 때마다 찾아보면 된다. A ~ Z의 아스키 코드는아스키코드는 65 ~ 90까지이고, a ~ z의 아스키코드는 97 ~ 122이다. 이를 이용해서 적절한 조건에 따라 처리해주면 된다. class Solution { public String solution(String s, int n) { String answer = ""; // 1. 문자열 탐색 for(int i = 0;i n만큼 밀린 문자가 Z인 90을 넘을 경우 -26을 통해 A부터 시작, 아니면 그냥 밀린 문자를 추가. if('A' n만큼 밀린 문자가 z인 122를 넘을..
[프로그래머스,Level 1] 약수의 합(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 이 문제의 핵심은 1부터 n까지의 수 중 n과 나누어 떨어지는 약수를 찾는 것이다. 여기서 참고하면 좋은 것이, 1부터 n 까지라고 해서 반복문을 전부 돌 필요가 없다. 왜냐하면, 예제 1번을 예로 들면 1일 때 12는 12로 나누어 떨어지기 때문에 약수이다. 이것을 12까지 반복했을 때 12 역시 12를 1로 나누어 떨어지게 하기 때문에 약수이다. 즉, 1과 12까지를 연산할 필요가 없이, n/2까지 또는 n의 제곱근까지만 반복해주면 연산 횟수를 줄일 수 있다. class Solution { public int solution(int n) { int answer = 0; // 1. 1부터 n의 제곱근까지 반복. for(int i = 1;i
[프로그래머스,Level 1] 이상한 문자 만들기(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 처음에는 단순히 String클래스의 split함수를 이용해 공백을 구분하여 단어를 저장하고, 각 단어의 인덱스에 따라 대, 소문자 변환을 수행해 주었는데 지속해서 틀린정답이 되었다. 더 이상 해결하지 못하고 검색을 통해 풀이를 분석하던 중 문제에서 '각 단어는 하나 이상의 공백문자로 구분되어 있습니다'라는 부분이 이 문제의 핵심이라는 것을 알게 되었다. - 정답풀이 즉, 주어지는 문자열 데이터가 입출력 예제와 같이 우리가 일반적으로 알고 있는 형태의 단어 나열이 아닌, 맨 앞과 뒤에 공백이 존재할 수 있고 또한 단어 사이 사이에 공백이 여러 개 존재할 수 있는 것이다. 하지만 이 중 위의 방식으로 풀었을 때 고려되지 않는 부분이 한 가지가 있는데, 문자열의 맨 뒤에 공백이 포함되어 있는 경우..
[프로그래머스,Level 1] 자릿수 더하기(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 이 문제는 앞서 게시글로 올렸던 '정수 내림차순으로 배치하기', '자연수 뒤집어 배열로 만들기' 문제의 핵심이라 할 수 있는 문제이다. 필자는 문제를 역순으로 풀다 보니 이 문제의 게시가 늦어졌다. 문제 자체는 간단하다. import java.util.*; public class Solution { public int solution(int n) { int answer = 0; // 1. %연산자를 이용해 각 자릿수를 추출해준다. while(n != 0){ answer+=n%10; n/=10; } return answer; } }
[프로그래머스,Level 1] 자연수 뒤집어 배열로 만들기(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
-첫 풀이 및 정답풀이 이 문제의 핵심은 입력받은 데이터를 각 자릿수 별로 추출해 거꾸로 나열한 배열을 반환하면 된다. 문제 자체는 '정수 내림차순으로 배치하기' 문제의 핵심 내용과 동일하지만, 필자는 예제 12345의 결과와 문제를 제대로 읽지 않아 각 자릿수를 내림차순으로 정렬하려고 했었다. % 연산자를 이용한 자릿수 추출 방법을 사용한다면, 자연스럽게 맨 뒷자리부터 자릿수를 얻을 수 있기 때문에 별도의 정렬 과정은 필요하지가 않다. import java.util.ArrayList; import java.util.Collections; class Solution { public ArrayList solution(long n) { ArrayList answer = new ArrayList(); // 1..
[프로그래머스,Level 1] 정수 내림차순으로 배치하기(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 이 문제의 경우 입력 데이터를 어떻게 변형시킬 수 있을지 고민하다가, 1. 입력 데이터를 각 자릿수 별로 추출한다. 2. 추출한 자릿수들을 선형 자료구조에 저장해 3. 역순으로 정렬시킨다. 4. 내림차순으로 정렬된 자릿수들을 문자열로 붙여나간다.라는 생각을 토대로 코드를 작성해 보았다. 또한, 문제에서 새로운 정수를 리턴하는 것이 결괏값이기 때문에 그에 맞게 데이터 타입 역시 바꾸어 주어야 한다. import java.util.ArrayList; import java.util.Collections; class Solution { public long solution(long n) { // 1. 각 자릿수를 저장할 ArrayList 및 문자열 변수. ArrayList arr = n..
[프로그래머스,Level 1] 정수 제곱근 판별(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 이 문제는 Math 클래스에서 제공하는 특정 정수의 제곱근을 반환하는 sqrt() 메서드와 제곱 값을 반환하는 pow() 메서드를 활용하면 간단하게 풀 수 있다. class Solution { public long solution(long n) { // 1. n의 제곱근, 명시적 형변환 필요. long sqrt_n = (long)Math.sqrt(n); // 2. n이 양의 정수 sqrt_n의 제곱과 같다면, sqrt_n +1 ^ 2를 반환하고 아니면 -1을 반환. return (long)Math.pow(sqrt_n,2) == n ? (long)Math.pow(sqrt_n+1,2) : -1; } } double 타입으로 반환되는 Math.sqrt()메서드의 결괏값을 제곱(^2)한..
[프로그래머스,Level 1] 제일 작은 수 제거하기(JAVA 구현)
·
CodingTest/프로그래머스(Programmers)
- 첫 풀이 및 정답풀이 간단하게 for문을 통해 해결할 수 있는 문제이지만, Collections.min(), Collections.remove(), Collections.indexOf() 등 Collections 클래스에서 제공하는 다양한 메서드들을 이용하면 더 간단하게 풀 수 있을 것 같다. import java.util.ArrayList; class Solution { // 1. 동적 크기 배열을 위한 ArrayList 반환 public ArrayList solution(int[] arr) { ArrayList answer = new ArrayList(); // 2. 배열 내 최솟값 저장 변수. int min = Integer.MAX_VALUE; // 3. 완전탐색을 통한 최솟값 저장. for(i..