프로그래머스 코딩 기초 트레이닝 🔥 출력 / 연산 / 문자열

2025년 04월·자바

더보기

처음에 기초 문제들은 쉬워 보여서 건너뛰었었는데요 입문 문제들을 풀다 보니까 기초 다지고 넘어가는 게 좋을 것 같아서 다시 기초 문제들을 풀게 되었습니다 (๑>؂•̀๑) 기초 끝내고 입문 이어서 풀 예정 !

출력

대소문자 바꿔서 출력하기

🗒️ 영어 알파벳으로 이루어진 문자열 str이 주어집니다. 각 알파벳을 대문자는 소문자로, 소문자는 대문자로 변환해서 출력하는 코드를 작성해보세요.

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        StringBuilder sb = new StringBuilder();
        
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (Character.isUpperCase(c)) {
                sb.append(Character.toLowerCase(c));
            } else {
                sb.append(Character.toUpperCase(c));
            }
        }
        
        System.out.println(sb.toString());
    }
}

String.charAt(int index)

문자열 특정 위치(index)의 문자를 꺼냄

Character.isUpperCase(char c) / Character.isLowerCase(char c)

문자가 대문자인지 / 소문자인지 판별

Character.toUpperCase(char c) / Character.toLowerCase(char c)

문자를 대문자로 / 소문자로 변환

 

연산

더 크게 합치기

🗒️ 연산 ⊙는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.

  • 12 ⊙ 3 = 123
  • 3 ⊙ 12 = 312

양의 정수 a와 b가 주어졌을 때, a ⊙ b와 b ⊙ a 중 더 큰 값을 return 하는 solution 함수를 완성해주세요. 단, a ⊙ b와 b ⊙ a가 같다면 a ⊙ b를 return 합니다.

class Solution {
    public int solution(int a, int b) {
        int ab = Integer.parseInt("" + a + b);
        int ba = Integer.parseInt("" + b + a);
        
        return Math.max(ab, ba);
    }
}

🤓☝️ 숫자를 문자열로 변환할 때 "" + 숫자 사용하기

Integer.parseInt(String s)

문자열을 정수(int)로 변환

 

문자열 곱하기

🗒️ 문자열 my_string과 정수 k가 주어질 때, my_string을 k번 반복한 문자열을 return 하는 solution 함수를 작성해주세요.

class Solution {
    public String solution(String my_string, int k) {
        return my_string.repeat(k);
    }
}

String.repeat(int count)

문자열을 count번 반복해서 이어붙임

 

문자 리스트를 문자열로 변환하기

🗒️ 문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해주세요.

class Solution {
    public String solution(String[] arr) {
        return String.join("", arr);
    }
}

String.join(String delimiter, String... elements)

여러 문자열을 구분자 넣어가며 이어붙임

 

문자열

공백으로 구분하기 2

🗒️ 단어가 공백 한 개 이상으로 구분되어 있는 문자열 my_string이 매개변수로 주어질 때, my_string에 나온 단어를 앞에서부터 순서대로 담은 문자열 배열을 return 하는 solution 함수를 작성해주세요.

class Solution {
    public String[] solution(String my_string) {
        return my_string.trim().split("[ ]+");
    }
}

String.trim()

문자열 양쪽 끝 공백 제거

 

🔎 정규표현식

패턴 의미 예시
. 아무 문자 1개 a.c 👉🏼 abc, acc, ...
* 앞 문자가 0번 이상 반복 ab* 👉🏼 a, ab, abb, abbb, ...
+ 앞 문자가 1번 이상 반복 ab+ 👉🏼 ab, abb, abbb, ...
? 앞 문자가 0번 또는 1번 ab? 👉🏼 a, ab
[] 문자 집합 [abc] 👉🏼 a, b, c 중 하나
[^] 문자 집합 부정 [^abc] 👉🏼 a, b, c 제외한 문자
() 그룹핑 (abc)+ 👉🏼 abc, abcabc, ...

 

세 개의 구분자

🗒️ 임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다. 예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"]가 됩니다. 문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해주세요. 단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return 할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.

class Solution {
    public String[] solution(String myStr) {
        String[] result = Arrays.stream(myStr.split("[abc]"))  // 배열을 스트림으로 변환
                                .filter(s -> !s.isEmpty())     // 빈 문자열 제외
                                .toArray(String[]::new);       // 다시 배열로 변환

        return result.length == 0 ? new String[]{"EMPTY"} : result;
    }
}

👀 Arrays.stream(배열).filter(x -> 조건).toArray(배열타입::new)

정규표현식은 위 문제 참고 ...!

 

배열 만들기 5

🗒️ 문자열 배열 intStrs와 정수 k, s, l가 주어집니다. intStrs의 원소는 숫자로 이루어져 있습니다. 배열 intStrs의 각 원소마다 s번 인덱스에서 시작하는 길이 l짜리 부분 문자열을 잘라내 정수로 변환합니다. 이때 변환한 정수값이 k보다 큰 값들을 담은 배열을 return 하는 solution 함수를 완성해주세요.

class Solution {
    public int[] solution(String[] intStrs, int k, int s, int l) {
        return Arrays.stream(intStrs)
                     .mapToInt(x -> Integer.parseInt(x.substring(s, s + l)))  // 파싱
                     .filter(num -> num > k)                                  // 필터링
                     .toArray();
    }
}

👀 Arrays.stream(배열).mapToInt(x -> 변환값).filter(x -> 조건).toArray()

 

x 사이의 개수

🗒️ 문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해주세요.

class Solution {
    public int[] solution(String myString) {
        return Arrays.stream(myString.split("x", -1))
                     .mapToInt(String::length)  //.mapToInt(x -> x.length())와 같음
                     .toArray();
    }
}

👀 Arrays.stream(배열).mapToInt(x -> 변환값).toArray()

String.split(String regex, int limit)

구분자를 기준으로 문자열을 나누어 배열로 반환

  • limit = 0: 마지막 빈 문자열 삭제
  • limit = 양수(>0): 최대 limit개 조각으로 자름(남은 건 마지막 조각에)
  • limit = 음수(<0): 마지막 빈 문자열 포함

 

9로 나눈 나머지

🗒️ 음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다. 이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.

class Solution {
    public int solution(String number) {
        int sum = 0;
        
        for (int i = 0; i < number.length(); i++) {
            sum += number.charAt(i) - '0';
        }
        
        return sum % 9;
    }
}

🤓☝️ 문자('0'~'9')를 숫자로 변환할 때 char - '0' 사용하기

 

문자열 여러 번 뒤집기

🗒️ 문자열 my_string과 이차원 정수 배열 queries가 매개변수로 주어집니다. queries의 원소는 [s, e] 형태로, my_string의 인덱스 s부터 인덱스 e까지를 뒤집으라는 의미입니다. my_string에 queries의 명령을 순서대로 처리한 후의 문자열을 return 하는 solution 함수를 작성해주세요.

class Solution {
    public String solution(String my_string, int[][] queries) {
        StringBuilder sb = new StringBuilder(my_string);

        // 2차원 배열 순회
        for (int[] query : queries) {
            int s = query[0];
            int e = query[1];

            // s와 e를 양쪽에서부터 교환(swap)하면서 뒤집기
            while (s < e) {
                char temp = sb.charAt(s);
                sb.setCharAt(s, sb.charAt(e));
                sb.setCharAt(e, temp);
                s++;
                e--;
            }
        }

        return sb.toString();
    }
}

 

특정 문자열로 끝나는 가장 긴 부분 문자열 찾기

class Solution {
    public String solution(String myString, String pat) {
        int idx = myString.lastIndexOf(pat);
        return myString.substring(0, idx + pat.length());
    }
}

String.lastIndexOf(String s)

문자열 s가 마지막으로 등장하는 인덱스를 반환

String.indexOf(String s)

문자열 s가 처음 등장하는 인덱스를 반환

 

접미사인지 확인하기

🗒️ 어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다. 문자열 my_string과 is_suffix가 주어질 때, is_suffix가 my_string의 접미사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해주세요.

class Solution {
    public int solution(String my_string, String is_suffix) {
        return my_string.endsWith(is_suffix) ? 1 : 0;
    }
}

String.endsWith(String suffix)

문자열이 해당 접미사로 끝나는지 확인

String.startsWith(String prefix)

문자열이 해당 접두사로 시작하는지 확인

'자바' 카테고리의 다른 글

지삐띠니야 메서드 알려줘  (0) 2025.05.02
프로그래머스 코딩 기초 트레이닝 🔥 조건문 / 반복문  (0) 2025.05.01
프로그래머스 코딩테스트 입문 60%  (0) 2025.04.27
프로그래머스 코딩테스트 입문 40%  (0) 2025.04.27
프로그래머스 코딩테스트 입문 20%  (0) 2025.04.25
'자바' 카테고리의 다른 글
  • 지삐띠니야 메서드 알려줘
  • 프로그래머스 코딩 기초 트레이닝 🔥 조건문 / 반복문
  • 프로그래머스 코딩테스트 입문 60%
  • 프로그래머스 코딩테스트 입문 40%
토토이
토토이
토토이 님의 블로그 입니다.
  • 토토이
    토토이 님의 블로그
    토토이
    • 분류 전체보기 (18)
      • KT 에이블스쿨 (5)
      • 복습 (1)
      • 자바 (11)
      • 뻐꿈 (0)
  • 태그

    AICE
    java
    스택
    에이블스쿨
    인프런
    자격증
    자바
    취준
    코딩테스트
    코테
    프로그래머스
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
  • hELLO· Designed By정상우.v4.10.3
토토이
프로그래머스 코딩 기초 트레이닝 🔥 출력 / 연산 / 문자열
상단으로

티스토리툴바