알고리즘
[프로그래머스] Lv1 문제 풀기 -1
바랄 희
2022. 11. 25. 21:40
아직 자바로 코드를 짜고 알고리즘을 구상하는 것이 어려워서 많이 헤매고 있다..
🦊 정수 내림차순으로 배치하기
import java.util.*;
class Solution {
public long solution(long n) {
String[] nums = String.valueOf(n).split("");
Arrays.sort(nums);
StringBuilder sb = new StringBuilder();
for(int i=nums.length-1;i>=0;i--) sb.append(nums[i]);
return Long.parseLong(sb.toString());
}
}
처음에는 n 을 String 으로 바꾸고, charArray 로 바꾸고 해야 하나 싶었는데 이런 방법이 있었다니..!
String.valueOf 로 n의 값을 String 으로 바꾸고 이를 분할해서 nums 라는 배열에 넣는다. 이후 StringBuilder 를 이용해서 거꾸로 문자열을 더했다. 또한 parseInt 로 변환한 후 long 으로 변환해야 하나 했는데 위와 같이 parseLong을 사용할 수 있는 방법이 있다는 것을 미처 생각하지 못했다.
🦊 x만큼 간격이 있는 n개의 숫자
class Solution {
public long[] solution(int x, int n) {
long[] answer =new long[n];
answer[0] = x;
for(int i=1;i<n;i++){
answer[i] = answer[i-1]+x;
}
return answer;
}
}
🦊 나누어 떨어지는 숫자 배열
내 풀이
class Solution {
public int[] solution(int[] arr, int divisor) {
List<Integer> answer = new ArrayList<>();
for(int i=0;i<arr.length;i++){
if(arr[i]%divisor == 0){
answer.add(arr[i]);
}
}
if(answer.size() == 0){
answer.add(-1);
}
Collections.sort(answer);
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
모범 풀이
import java.util.Arrays;
class Divisible {
public int[] divisible(int[] array, int divisor) {
//ret에 array에 포함된 정수중, divisor로 나누어 떨어지는 숫자를 순서대로 넣으세요.
return Arrays.stream(array).filter(factor -> factor % divisor == 0).toArray();
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
Divisible div = new Divisible();
int[] array = {5, 9, 7, 10};
System.out.println( Arrays.toString( div.divisible(array, 5) ));
}
}
조금은 문제가 개편돼서 일부분은 참고할 수 없지만.. 확실히 filter 를 사용하는 것은 참고할 만한 부분이라고 생각된다.
🦊 음양 더하기
class Solution {
public int solution(int[] absolutes, boolean[] signs) {
int answer = 0;
for(int i=0;i<absolutes.length;i++){
answer += signs[i] ? absolutes[i] : absolutes[i]*-1;
}
return answer;
}
}
삼항 연산자 사용한 점 뿌듯.. 했지만 다른 코드를 참고해봤다. 아래와 같이 개선할 수 있을 것이다.
class Solution {
public int solution(int[] absolutes, boolean[] signs) {
int answer = 0;
for(int i=0;i<absolutes.length;i++){
answer += absolutes[i]*(signs[i] ? 1:-1);
}
return answer;
}
}
signs 의 여부에 따라 -1 혹은 1을 반환하는 것이다.
🦊 없는 숫자 더하기
import java.util.*;
class Solution {
public int solution(int[] numbers) {
int ans = Arrays.stream(numbers).sum();
return 45 - ans;
}
}
나름 효율적으로 잘 풀었다고 생각했는데 더 줄일 수 있겠다.
class Solution {
public int solution(int[] numbers) {
return 45-Arrays.stream(numbers).sum();
}
}
🦊 가운데 글자 가져오기
import java.util.*;
class Solution {
public String solution(String s) {
char[] chars = s.toCharArray();
int index = chars.length/2;
if(chars.length%2==1){
return Character.toString(chars[index]);
}
return Character.toString(chars[index-1]) + Character.toString(chars[index]);
}
}
🦊 수박수박수박수박수박수?
class Solution {
public String solution(int n) {
String word = "수박";
if(n%2==0){
return word.repeat(n/2);
}
return word.repeat(n/2) + "수";
}
}
이거 좀 잘푼듯 ✌🏻
import java.util.*;
class Solution {
public String solution(String s) {
String[] ans = String.valueOf(s).split("");
Arrays.sort(ans,Collections.reverseOrder());
return String.join("", ans);
}
}
🦊 약수의 개수와 덧셈
import java.util.*;
class Solution {
public boolean isSqaureNumber(int num){
if(Math.pow((int)Math.sqrt(num), 2) == num){
return true;
}
return false;}
public int solution(int left, int right) {
int answer = 0;
for(int i=left;i<=right;i++){
if(isSqaureNumber(i)){
answer-=i;
continue;
}
answer+=i;
}
return answer;
}
}
제곱수로 약수 홀수인지 짝수인지 확인하는 것에 접근을 성공해서 기분 좋았음..
🦊 부족한 금액 계산하기
class Solution {
public long solution(int price, int money, int count) {
long sum = count*(price*2+(count-1)*price)/2;
return money-sum>=0 ? 0:sum-money;
}
}
일부 테케에서 오류가 뜨는데 왜인지 모르겠다 ...... 다른 분들의 코드를 참고해도 다른 부분을 못찾겠다..