Algorithms

Programmers Day 6

유영서 2023. 7. 17. 18:46

- 문자열 뒤집기

 

매개변수로 받은 값이 배열 형태가 아니기 때문에,, substring을 사용하였다

class Solution {
    public String solution(String my_string) {
        String answer = "";
        for (int i = my_string.length()-1; i >= 0 ; i--){
            answer += my_string.substring(i, i+1);
        }
        return answer;
    }
}

--> 근데 그냥 substring(i)해도 됐을 듯

 

Substring 문법

  • String substring(int index)
  • String substring(int start, int end) : 끝나는 지점은 end-1

 

다른 사람 풀이

//(1)
import java.util.*;

class Solution {
    public String solution(String my_string) {
        StringBuilder sb = new StringBuilder();
        sb.append(my_string);
        sb.reverse();

        return sb.toString();
    }
}
//(2)
class Solution {
    public String solution(String myString) {
        return new StringBuilder(myString).reverse().toString();
    }
}

 

String은 불변하여 값을 변경할 수 없다.

.concat or + 를 이용할 때는 기존 String 값이 아니라 새로 값을 할당하는 것. 

그래서 속도가 느려져 비효율적인데, 

바로 이 때 사용하면 좋은 것이 StringBufferStringBuilder.

 

StringBuffer와 StringBuilder는 변하기(mutable) 때문에 .append() or .delete() 통해 값을 변경 가능

* StringBuffer는 공통 메소드가 동기화되므로 multi thread 환경에서는 StringBuffer를 사용하는 것이 안전하다고 함(값이 예상치 못하게 변경되는 것을 방지)

그 외에는 더 좋은 성능을 가진 StringBuilder 사용하기!

 

 

- 직각삼각형 출력하기

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        for (int i=1; i<=n; i++){
            for (int j=1; j<=i; j++){
                System.out.print("*");
            } 
            System.out.println();
        }
    }
}

 

다른 사람의 풀이

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        for(int i=1; i<=n; i++){
            System.out.println("*".repeat(i));
        }
    }
}

-> 우아 문자열 반복하는 repeat() 메소드 같은게 있네 신기하다

 

 

- 짝수 홀수 개수

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[2];
        for (int i=0; i < num_list.length; i++){
            if (num_list[i] % 2 == 0) answer[0]++;
            else answer[1]++;
        }
        return answer;
    }
}

짧게 나타내봤는데,,

 

 

다른 사람의 풀이는?!

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[2];

        for(int i = 0; i < num_list.length; i++)
            answer[num_list[i] % 2]++;

        return answer;
    }
}

0과 1로만 나오는 나머지의 값을 이용하여 그거 그대로 answer배열의 index로 사용하기.. 대박

 

 

- 문자 반복 출력하기

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return

class Solution {
    public String solution(String my_string, int n) {
        String answer = "";
        for (int i =0; i<my_string.length(); i++){
            for (int j=0; j<n; j++){
                answer += my_string.charAt(i);
            }
        }
        return answer;
    }
}

charAt이란 것도 배웠다! 인덱스 값 넣어주면 해당 위치에 있는 문자(char)를 출력.

사실 n번 돌아가는 for문 말고 .repeat() 메소드 쓰려고 했는데,, 걔는 문자열 메소드라.. 포기하고 for문을 썼다.

 

 

다른 사람 풀이

class Solution {
    public String solution(String my_string, int n) {
        StringBuilder sb = new StringBuilder();
        for(char c : my_string.toCharArray()){
            sb.append((c + "").repeat(n));
        }
        return sb.toString();
    }
}

String인 my_string을 CharArray로 바꾸고 sb에 문자를 추가(string으로 바꾸면서)하면서 반복시키기... 대박!