본문 바로가기
  • Jetpack 알아보기

알고리즘120

[JAVA] 프로그래머스 Lv.1 : 자연수 뒤집어 배열로 만들기 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 예제: Input: 12345 Output: [5, 4, 3, 2, 1] 제한 조건: n은 10,000,000,000이하인 자연수입니다. Solution #1 class Solution { public int[] solution(long n) { String number = String.valueOf(n); int[] answer = new int[number.length()]; for (int i = 0; i < number.length(); i++) { answer[number.length() - i - 1] = number.charAt(i) - '0'; } r.. 2021. 4. 2.
[JAVA] 프로그래머스 Lv.1 : 정수 내림차순으로 배치하기 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 예제: Input: 118372 Output: 873211 제한 조건: n은 1이상 8000000000 이하인 자연수입니다. Solution #1 import java.util.Arrays; class Solution { public long solution(long n) { String[] array = String.valueOf(n).split(""); StringBuilder builder = new StringBuilder(); Arrays.sort(array); for (int i = array.leng.. 2021. 4. 2.
[JAVA] 프로그래머스 Lv.1 : 정수 제곱근 판별 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. 예제: Input: 121 Output: 144 Input: 3 Output: -1 제한 조건: n은 1이상, 50000000000000 이하인 양의 정수입니다. Solution #1 class Solution { public long solution(long n) { double sqrt = Math.sqrt(n); return (sqrt-(int)sqrt) > 0 ? -1 : (long) Math.pow(sqrt + 1, 2); } } Result #1 💡 양의 정수 n이 어떤 수.. 2021. 4. 2.
[JAVA] 프로그래머스 Lv.1 : 제일 작은 수 제거하기 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. 예제: Input: [4, 3, 2, 1] Output: [4, 3, 2] Input: [10] Output: [-1] 제한 조건: arr은 길이 1 이상인 배열입니다. 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다. Solution #1 class Solution { public int[] solution(int[] arr) { int length = arr.length; int min.. 2021. 4. 2.
[JAVA] 프로그래머스 Lv.1 : 짝수와 홀수 정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요. 예제: Input: 3 Output: "Odd" Input: 4 Output: "Even" 제한 조건: num은 int 범위의 정수입니다. 0은 짝수입니다. Solution #1 class Solution { public String solution(int num) { return (num % 2 == 0) ? "Even" : "Odd"; } } Result #1 💡 삼항 연산자를 사용하면 굉장히 간단한 문제다. More Algorithm! 👇👇 github.com/ggujangi/ggu.programmers ggujangi/ggu.programmers 프로그래머스 알고리즘, JAV.. 2021. 4. 2.
[JAVA] 프로그래머스 Lv.1 : 최대공약수와 최소공배수 예제: n m return 3 12 [3, 12] 2 5 [1, 10] 제한 조건: 두 수는 1이상 1000000이하의 자연수입니다. Solution #1 class Solution { public int[] solution(int n, int m) { int temp = 1; int originM = m, originN = n; while (temp!=0){ temp = m % n; m = n; n = temp; } return new int[]{m, (originM/m) * (originN/m) * m}; } } Result #1 💡 유클리드 호제법을 이용하여 최대공약수를 구한다. 최대공약수를 구하면 공식을 통해 최소 공배수도 구할 수 있다. More Algorithm! 👇👇 github.com/gg.. 2021. 4. 1.
[JAVA] 프로그래머스 Lv.1 : 콜라츠 추측 예제: n result 6 8 16 4 626331 -1 제한 조건: 입력된 수, num은 1 이상 8000000 미만인 정수입니다. Solution #1 class Solution { public int solution(int num) { int answer = 0; while (num != 1) { if (num % 2 == 0) { num = num / 2; } else if (num % 2 == 1) { num = num * 3 + 1; } answer++; if (answer == 500) { answer = -1; break; } } return answer; } } Result #1 💡 조건을 잘 읽어보고, while 반복문과 if 조건문을 잘 이용하면 어렵지 않은 문제이다. More Alg.. 2021. 4. 1.
[JAVA] 프로그래머스 Lv.1 : 평균 구하기 정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요. 예제: arr return [1, 2, 3, 4] 2.5 [5, 5] 5 제한 조건: n과 m은 각각 1000 이하인 자연수입니다. Solution #1 class Solution { public double solution(int[] arr) { double answer = 0; for (int i : arr) { answer += i; } return answer / arr.length; } } Result #1 💡 for 반복문 + 더하기, 나누기 연산 사용 배열의 모든 정수를 더하고, 배열의 길이만큼 나누기 연산을 하는 간단한 문제이다. Solution #2 import java.util.Arrays;.. 2021. 4. 1.
[JAVA] 프로그래머스 Lv.1 : 하샤드 수 예제: arr return 10 true 12 true 11 false 13 false 제한 조건: x는 1 이상, 10000 이하인 정수입니다. Solution #1 class Solution { private int sum = 0; public boolean solution(int x) { String.valueOf(x).chars().forEach(c -> sum += c - '0' ); return x % sum == 0; } } Result #1 💡 chars() 함수를 통해 stream으로 만들고, forEach문으로 각 자릿수를 더해준다. Solution #2 class Solution { public boolean solution(int x) { int sum = (x / 10000) + .. 2021. 4. 1.
[JAVA] 프로그래머스 Lv.1 : 핸드폰 번호 가리기 예제: phone_number return "01033334444" "*******4444" "027778888" "*****8888" 제한 조건: s는 길이 4 이상, 20이하인 문자열입니다. Solution #1 class Solution { public String solution(String phone_number) { StringBuilder answer = new StringBuilder(); for (int i = 0; i = phone_number.length() - 4) answer.append(phone_number.charAt(i)); else answer.append("*"); } return answer.toSt.. 2021. 4. 1.