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();
}
}
- StringBuilder sb = new StringBuilder();: 문자열을 효율적으로 처리하기 위해 StringBuilder를 생성합니다.
- for (char c : my_string.toCharArray()) {: 문자열을 문자 배열로 변환하고 각 문자에 대해 반복합니다.
- sb.append((c + "").repeat(n));: 현재 문자 c를 문자열로 변환한 후 repeat(n)을 사용하여 해당 문자를 n번 반복하고, 이를 StringBuilder에 추가합니다.
- 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 |