처음에 기초 문제들은 쉬워 보여서 건너뛰었었는데요 입문 문제들을 풀다 보니까 기초 다지고 넘어가는 게 좋을 것 같아서 다시 기초 문제들을 풀게 되었습니다 (๑>•̀๑) 기초 끝내고 입문 이어서 풀 예정 !
출력
대소문자 바꿔서 출력하기
🗒️ 영어 알파벳으로 이루어진 문자열 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 |