풀이

StringBuilder의 setCharAt 메서드를 사용해서 번호를 * 로 치환했다.

  public static String solution(String num) {
        //stringbuilder 객체 생성해주고 문자열 치환
        StringBuilder sb = new StringBuilder(num);
        for (int i = 0; i < sb.length() - 4; i++) {
            sb.setCharAt(i, '*');
        }
        //StringBuilder에서 String 으로 변환해서 리턴
        return sb.toString();
    }

다른 풀이

문자열 치환해야될 부분의 개수만큼 * 을 String에 추가해주고 나머지는 substring으로 뒤에서 4개 가져와서 추가해준다.

근데 String에 더하는 방법과 StringBuilder의 append() 사용하는 방법 중 어느쪽 성능이 좋은지는 모르겠답.

 public String solution(String phone_number) {
      String answer = "";

        for (int i = 0; i < phone_number.length() - 4; i++)
            answer += "*";

        answer += phone_number.substring(phone_number.length() - 4);

        return answer;
  }

풀이

String 배열에 있는 값들을 map에 key 값으로 넣고 value는 index값을 넣어서 "Kim" 을 출력해줬다.

 public String solution(String[] seoul) {
        Map<String, Integer> map = new HashMap<>();
        int i = 0;
        // key : 값 / value : index
        for (String str : seoul) {
            map.put(str, i);
            i++;
        }
        int x = map.get("Kim");
        return "김서방은 " + x + "에 있다";
    }

다른 풀이

String 배열을 List로 변환해서 .indexOf() 로 index를 뽑는다.

  public String findKim(String[] seoul){
        //x에 김서방의 위치를 저장하세요.
        int x = Arrays.asList(seoul).indexOf("Kim");

        return "김서방은 "+ x + "에 있다";
    }

풀이

홀수 짝수로 나눠서 열심히 수학 풀었는데 더 간편한 공식과 방법이 있었다.

public long solution(int a, int b) {
        if (a == b) return a;
        int cnt = Math.abs(b - a) + 1;
        if (cnt % 2 == 0) return (a + b) * (cnt / 2);
        else return (a + b) * (cnt / 2) + ((a + b) / 2);

    }

 

다른 풀이

for문으로 하나씩 더해서 리턴

for문 조건에 삼항사용

class Solution {
  public long solution(int a, int b) {
      long answer = 0;
      for (int i = ((a < b) ? a : b); i <= ((a < b) ? b : a); i++) 
          answer += i;

      return answer;
  }
}

 

 

등차수열의 합 공식 사용

class Solution {

    public long solution(int a, int b) {
        return sumAtoB(Math.min(a, b), Math.max(b, a));
    }

    private long sumAtoB(long a, long b) {
        return (b - a + 1) * (a + b) / 2;
    }
}

 public static int solution(int num) {
        int cnt = 0;
        //주어진 수를 계산 과정에서 오버플로우가 일어나지 않도록 형변환을 해주는 작업
        long n = (long)num;
        
        //주어진 수가 1이명 0리턴
        if (n == 1) return 0;
        while (n != 1) {
            if (n % 2 == 0) n /= 2;
            else n = n * 3 + 1;

            cnt++;
            
            //반복한 작업수가 500을 넘으면 -1 리턴
            if (cnt > 500) return -1;
        }
        return cnt;
    }

풀이

주어진 조건대로 짜면 되는데, 주어진 값이 626331에서 출력값이 기댓값과 다르게 나왔다. 

연산 과정중에 오버플로우가 발생해서 다르게 나왔다.

 

풀이

리턴할 배열을 생성해준 후 값을 넣어줬다.

public long[] solution(int x, int n) {
        long[] res = new long[n];
        long tmp = x;
        for (int i = 0; i < n; i++){
            res[i] = tmp;
            tmp += x;
        }
        return res;
    }

처음에는 ArrayList 만들어서 add해주려고 했는데 

ArrayList -> long[] 하려면 stream().mapToLong() 사용해야 하는데 람다 써야되서 포기함

 

tmp를 int형으로 지정하면 테스트 몇개 에러났다. 

 

풀이

1. 주어진 long을 String으로 변환해서 각문자를 String배열로 받아서 정렬

2. StringBuilder를 생성해서 넣어주기

3. 순서를 역순으로 돌리기

4. StringBuilder를 String 객체로 변환해서 Long으로 형변환해준후 리턴하기

public static long solution(long n) {
        // long을 String으로 변환해서 각문자를 split해서 String배열로 받아서 정렬한다.
        String[] arr = String.valueOf(n).split("");
        Arrays.sort(arr);

        //stringBuilder를 생성하고 정렬된 순으로 넣어주기
        StringBuilder sb = new StringBuilder();
        for (String s : arr){
            sb.append(s);
        }

        //StringBuilder에 있는 문자열을 reverse 하고
        // String객체로 만든후 Long으로 형변환해서 리턴
        return Long.parseLong(sb.reverse().toString());

    }

 

풀이 

영문자 ascii값을 idx로 한 배열을 만들고 값에다가 갯수를 저장해줬다. 

 

p와 y의 idx 값 구하기

 public static void main(String[] args) {
        int P = 'P' - 'A';
        int p = 'p' - 'A';
        int y = 'y' - 'A';
        int Y = 'Y' - 'A';

        System.out.println("P = " + P);
        System.out.println("p = " + p);
        System.out.println("Y = " + Y);
        System.out.println("y = " + y);

//        P = 15
//        p = 47
//        Y = 24
//        y = 56

    }

 

public static boolean solution(String s) {
    // 영문자 char의 ascii값을 index로하는 길이가 58인 int 배열 생성
    int[] arr = new int[58];

    // s 를 하나씩 읽어서 ascii 값이 index인 자리에 값 증가
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        arr[c - 'A']++;
    }

    // p의 개수와 y의 개수 구하기
    int p = arr[15] + arr[47];
    int y = arr[24] + arr[56];

    if (p == y) return true;
    else
        return false;
}

 

 

다른 풀이

s의 대문자를 소문자로 바꾼후 한글자씩 비교 

변수는 count 하나만 둬서 모든 char 비교후

값이 0이 나오면 p와 y값이 동일하므로 true리턴

class Solution {
    boolean solution(String s) {
        s = s.toLowerCase();
        int count = 0;

        for (int i = 0; i < s.length(); i++) {

            if (s.charAt(i) == 'p')
                count++;
            else if (s.charAt(i) == 'y')
                count--;
        }

        if (count == 0)
            return true;
        else
            return false;
    }
}

 

풀이

1. ArrayList 생성하고

2. n을 % 연산한 값을 ArrayLIst에 넣어줬다.

3. ArrayList -> array 변환 후 리턴

 

Integer ArrayList 를  int array로 변환하는 방법

int[] intArr = list.stream().mapToInt(i -> i).toArray();
 public static int[] solution(long n) {
        int[] answer = {};
        // List 생성
        List<Integer> arr = new ArrayList<Integer>();

        // List에 마지막요소부터 넣기
        while (n > 0) {
            int tmp = (int) n % 10;
            arr.add(tmp);
            n /= 10;
        }

        // Integer List -> int Array
        answer = arr.stream().mapToInt(i -> i).toArray();

        return answer;
    }

 

 

다른 풀이

n의 자리수의 길이를 갖는 int[] 배열을 만들어두고 

앞에서부터 차례로 넣기

 public static int[] solution(long n) {
        // 주어진 n이 몇자리인지 알아서 배열의 길이를 구하려고, n을 문자열로 변환 
        String a = "" + n;
        int[] answer = new int[a.length()];
        int idx = 0;

        // 배열의 index에 값 하나씩 넣기
        while (n > 0) {
            answer[idx] = (int) (n % 10);
            n /= 10;
            idx++;
        }
        return answer;
    }

참고

https://www.delftstack.com/ko/howto/java/how-to-convert-integer-list-to-int-array-in-java/

+ Recent posts