1️⃣ 문자열 뒤집기

 

문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string을 거꾸로 뒤집은 문자열을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ my_string의 길이 ≤ 1,000

입출력 예

my_string return
"jaron" "noraj"
"bread" "daerb"

 

  • my_string이 "jaron"이므로 거꾸로 뒤집은 "noraj"를 return합니다.
  • my_string이 "bread"이므로 거꾸로 뒤집은 "daerb"를 return합니다.

 

💻 나의 풀이

class Solution {
    public String solution(String my_string) {
        String answer = "";   // 빈 문자열 생성
        for (int i=my_string.length()-1; 0<=i; i--){  // 문자열을 뒤에서부터 순회
            answer += my_string.charAt(i);  // 뒤에서 부터 순회한 문자를 저장
        }
        return answer;
    }
}

 

먼저 결과를 저장할 빈 문자열을 생성합니다.

문자열을 뒤에서부터 거꾸로 순회해서 저장하는 코드가 필요한데 java에서 .length() 메소드를 사용합니다. .length() 는 문자열의 길이(문자의 개수)를 반환하는 메소드 입니다. 예를 들어, "Hello" 라는 문자열이 있다면 "Hello".length() 는 5를 반환합니다.

그러므로 my_string.length() 는 문자열 my_string 의 길이를 나타내고, my_string.length() - 1 은 문자열의 마지막 인덱스를 나타냅니다. (인덱스는 0부터 시작하기 때문에 -1) 

따라서 i가 my_string.length() - 1 에서 시작해서 0 이상일 때까지 감소되게 하면 문자열을 마지막 인덱스부터 시작하여 처음 인덱스까지 거꾸로 순회해 answer에 차곡차곡 넣게 됩니다. 이 때는 문자열에서 특정 인덱스 위치의 문자를 반환하는 메소드인 .charAt(index) 메소드를 사용합니다. 

이 문제를 풀면서 문자열의 길이(문자의 개수)를 반환하는 메소드인 .length() 를 알게 되었습니다!

 

 

🔎 다른 사람의 풀이

import java.util.*;

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

        return sb.toString();
    }
}

 

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

 

StringBuilder의 reverse 메소드를 사용하면 더 편하게 문자열을 뒤집을 수 있네요. 🙄

 

 


 

 

2️⃣ 직각삼각형 출력하기

 

문제 설명

"*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요.

 

제한사항

  • 0 n ≤ 10

입출력 예

입력 3
출력 *
**
***

 

💻 나의 풀이

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        if(n>=1 && n<=10){
            for(int i=1; i<=n; i++){   // 줄바꿈
                for(int j=1; j<=i; j++){    // 별 찍기
                System.out.print("*");
            }
            System.out.println();
          }
       }
    }
}

 

 

두 개의 중첩된 for 루프를 사용하여 삼각형 모양의 별을 출력합니다.

  • 바깥쪽 루프(for (int i = 1; i <= n; i++))는 행(row)을 나타내며, 1부터 입력된 수 n까지 반복합니다.
  • 안쪽 루프(for (int j = 1; j <= i; j++))는 각 행에서 별을 출력하는 역할을 합니다. 행의 번호만큼 별을 출력합니다.

각 행이 끝나면 줄 바꿈을 수행함으로써 직각삼각형 모양이 됩니다!

 

 

이 문제를 풀다가 갑자기 혼자 개발에 입문 하겠다고 C언어 강의를 들으며 별 찍기를 머리 싸매고 했던 기억이 났습니다. 그 떄 무슨 마음으로 C언어에 도전을 했었는지; 무조건 락도 근본이고, 공부도 근본부터지! 라며 어디서 C언어를 주워듣고 무식하게 시작했던 기억이;; 아무튼 지금 여기까지 왔다는 게 괜히 스스로 대견하기도 하고 신기하기도 하고(?) 그럽디다.

 

 

🔎 다른 사람의 풀이

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));
        }
    }
}

 

 


 

3️⃣ 짝수 홀수 개수

 

문제 설명

정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

 

제한사항

  • 1 ≤ num_list의 길이 ≤ 100
  • 0 ≤ num_list의 원소 ≤ 1,000

입출력 예

num_list result
[1,2,3,4,5] [2,3]
[1,3,5,7] [0,4]

 


 

💻 나의 풀이

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = {0,0};
        for(int i=0; i<num_list.length; i++){
            if(num_list[i] % 2 == 0){   // 짝수일 경우
                answer[0] += 1;  // +1
            } else {
                answer[1] += 1;  // 홀수일 경우 +1
            }
        }
        return answer;
    }
}

 

answer 배열을 {0,0}으로 초기화 해준 후, for문으로 num_list 길이만큼 반복하게 합니다.

if문을 사용하여 만약 2로 나눴을 때 나머지가 0 이라면 짝수이므로 answer의 0번째 원소에 +1을 해주고, 홀수일 경우 answer의 1번째 원소에 +1을 해줍니다.

 

 

🔎 다른 사람의 풀이

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;
    }
}

 

answer[num_list[i] % 2]++;:

=> 현재 숫자가 홀수이면 answer[0]을, 짝수이면 answer[1]을 증가시킵니다. 나머지 연산자 %를 사용하여 홀수와 짝수를 판별합니다.

 

이런 생각은 어떻게들 하시는거지......🥺

 

 


 

 

4️⃣ 문자 반복 출력하기

 

문제 설명

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string에 들어있는 각 문자를 n만큼 반복한 문자열을 return 하도록 solution 함수를 완성해보세요.

 

제한사항

  • 2 ≤ my_string 길이 ≤ 5
  • 2 ≤ n ≤ 10
  • "my_string"은 영어 대소문자로 이루어져 있습니다.

입출력 예

my_string n result
"hello" 3 "hhheeellllllooo"

 


 

💻 나의 풀이

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++){   // 각 문자를 n만큼 반복
                answer += my_string.charAt(i);  // 현재 문자를 추가
            }
        }
        return answer;
    }
}

 

my_string 문자열을 처음부터 끝까지 반복하는 for문,

각 문자를 주어진 횟수 n만큼 반복하는 for문

총 두 개의 for문이 필요합니다.

.charAt(index) 메소드를 사용해서 현재 문자를 문자열에 추가합니다.

 

 

🔎 다른 사람의 풀이

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();
    }
}
  1. StringBuilder sb = new StringBuilder();: 문자열을 효율적으로 처리하기 위해 StringBuilder를 생성합니다.
  2. for (char c : my_string.toCharArray()) {: 문자열을 문자 배열로 변환하고 각 문자에 대해 반복합니다.
  3. sb.append((c + "").repeat(n));: 현재 문자 c를 문자열로 변환한 후 repeat(n)을 사용하여 해당 문자를 n번 반복하고, 이를 StringBuilder에 추가합니다.
  4. sb.toString();: 최종적으로 생성된 문자열을 반환합니다.
StringBuilder
Java에서 문자열을 효율적으로 다룰 수 있게 하는 클래스입니다. 문자열은 불변하므로 문자열을 수정하면 새로운 문자열이 생성되고 기존 문자열은 가비지 컬렉션의 대상이 됩니다. StringBuilder는 이러한 불필요한 문자열 복사를 피하고 문자열을 효율적으로 수정할 수 있는 클래스입니다.
StringBuilder는 가변(mutable)이기 때문에 문자열을 여러 번 수정하거나 연결할 때 사용하면 성능이 향상됩니다. 여러 문자열을 연결할 때 + 연산자나 concat() 메소드보다 StringBuilder를 사용하는 것이 성능상 이점이 있습니다.

append 메소드
StringBuilder를 사용할 때는 append 메소드를 사용하여 문자열을 덧붙일 수 있습니다. append 메소드는 기존 StringBuilder에 문자열을 추가하고, StringBuilder 객체 자체를 반환하므로 연속적으로 호출하여 여러 문자열을 추가할 수 있습니다.

예시)
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
String result = sb.toString(); // "Hello World"​

 

StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" ").append("World");
String result = sb.toString(); // "Hello World"

'프로그래머스 > 0단계' 카테고리의 다른 글

DAY8 배열, 구현, 수학  (1) 2023.11.25
DAY7 문자열, 조건문, 수학, 반복문  (1) 2023.11.24
DAY5 수학, 배열  (1) 2023.11.23
DAY4 수학, 배열  (0) 2023.11.22
DAY3 사칙연산, 배열, 수학  (0) 2023.11.22
xoo | 수진