Java 참조자료형 중 문자열, 배열을 연습하기 위한 기본 예제 정리
문자열에서 한글, 영어, 공백 등을 제거해라
String str = "01abC123 한글123";
System.out.println(str.replaceAll("[가-힣]", "")); // 한글 제거
System.out.println(str.replaceAll("[a-z]", "")); // 소문자 제거
System.out.println(str.replaceAll("[A-Z]", "")); // 대문자 제거
System.out.println(str.replaceAll("[A-Za-z]", "")); // 알파벳 전체 제거
System.out.println(str.replaceAll("\\s+", "")); // 공백 제거
[가-힣] : 한글 문자 범위 매칭[A-Za-z] : 영문자 전체\\s+ : 하나 이상의 공백 문자(스페이스, 탭 등)콘솔에서 입력받은 값을 각 형식에 맞는지 검증해라
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 전화번호 검증: 010-XXXX-XXXX
System.out.println("전화번호를 입력하시오. 형식 : 010-XXXX-XXXX");
String number = br.readLine();
boolean numCheck = number.matches("^\\d{3}-\\d{4}-\\d{4}$");
if (numCheck) {
System.out.println("올바르게 입력되었습니다.");
} else {
System.out.println("전화번호 형식이 올바르지 않습니다.");
}
// 이메일 검증: 영문숫자@영문숫자.com
System.out.println("이메일주소를 입력하시오. 형식 : 영문숫자@영문숫자.com");
String email = br.readLine();
boolean emailCheck = Pattern.matches("^[a-z0-9]+@[a-z]+.com$", email);
if (emailCheck) {
System.out.println("올바르게 입력되었습니다.");
} else {
System.out.println("이메일 형식이 올바르지 않습니다.");
}
^\\d{3}-\\d{4}-\\d{4}$ : 숫자3-숫자4-숫자4 형식만 허용^[a-z0-9]+@[a-z]+.com$ : 아주 단순화된 이메일 패턴이라, 실제 서비스에서는 더 넓은 패턴을 쓰는 게 일반적임공백이 몇 개 있는지 출력해라
String blankString = "hello world java";
int blankTotal = 0;
for (int i = 0; i < blankString.length(); i++) {
if (blankString.substring(i, i + 1).isBlank()) {
blankTotal++;
}
}
System.out.println(blankTotal); // 9
isBlank() 는 공백 문자인지 여부를 확인할 때 편리문자열을 뒤집어서 출력해라
반복문과 reverse() 메서드 두 방식 모두 연습해보면 좋음.
String s = "hello";
// (1) 반복문 사용
StringBuilder sb1 = new StringBuilder();
for (int i = s.length() - 1; i >= 0; i--) {
sb1.append(s.charAt(i));
}
System.out.println(sb1); // olleh
// (2) reverse() 사용
StringBuilder sb2 = new StringBuilder(s);
sb2.reverse();
System.out.println(sb2); // olleh
StringBuilder.reverse() 는 내부 문자 배열을 거꾸로 뒤집는 유틸 메서드라 구현할 필요 없이 바로 사용 가능85, 65, 90으로 int 배열을 선언하고, 총합과 평균을 구하시오
int[] testArr = new int[]{85, 65, 90};
int sum = 0;
for (int score : testArr) {
sum += score;
}
double avg = (double) sum / testArr.length;
System.out.println("총 합 : " + sum);
System.out.println("평균 : " + avg);
배열의 최대값, 최소값을 구하라
int[] arr = {10, 20, 30, 12, 8, 17};
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int num : arr) {
if (max < num) {
max = num;
}
if (min > num) {
min = num;
}
}
System.out.println("최대값 : " + max);
System.out.println("최소값 : " + min);
MIN_VALUE / MAX_VALUE 로 두는 패턴은 코딩테스트에서도 자주 쓰임0번 인덱스와 1번 인덱스의 값을 자리를 바꿔서 출력해라
int[] arr = {20, 10, 30};
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
// 결과: {10, 20, 30}
배열을 뒤집어서 출력해라
int[] arr = {10, 20, 30, 40, 50};
int[] newArr = new int[arr.length];
int idx = 0;
for (int i = arr.length - 1; i >= 0; i--) {
newArr[idx] = arr[i];
idx++;
}
System.out.println(Arrays.toString(newArr)); // [50, 40, 30, 20, 10]
모두 각기 다른 숫자의 배열에서 만들어질 수 있는 두 숫자의 조합을 출력하시오
int[] combArr = {10, 20, 30, 40, 50};
for (int i = 0; i < combArr.length; i++) {
for (int j = i + 1; j < combArr.length; j++) {
System.out.println("(" + combArr[i] + ", " + combArr[j] + ")");
}
}
j = i + 1로 시작해 자기 자신과의 조합, 순서 중복 제거중복 숫자 배열에서 고유 값만 추출해 정렬해라 (프로그래머스 두 개 뽑아서 더하기 선행지식)
int[] arr = {10, 30, 20, 30, 10, 40};
Set<Integer> mySet = new HashSet<>();
// 중복 제거
for (int num : arr) {
mySet.add(num);
}
// Set → 배열 변환 + 정렬
int[] uniqueArr = new int[mySet.size()];
int index = 0;
for (int num : mySet) {
uniqueArr[index++] = num;
}
Arrays.sort(uniqueArr);
System.out.println(Arrays.toString(uniqueArr)); // [10, 20, 30, 40]
HashSet의 중복 불허 특성으로 간단히 중복 제거index 카운터 필요문제 : URL
주어진 문자열에서 특정 문자를 모두 제거하는 문제
class Solution120826 {
public String solution(String my_string, String letter) {
String answer = "";
for (int i = 0; i < my_string.length(); i++) {
if (my_string.charAt(i) != letter.charAt(0)) {
answer += my_string.charAt(i);
}
}
return answer;
}
}
letter 는 문자열이지만, 실제로는 한 글자만 쓰이므로 letter.charAt(0) 으로 비교+= 를 쓰는 대신 StringBuilder 로 리팩터링해보는 것도 좋은 연습문제 : URL
단어 s 의 가운데 글자를 반환하는 함수 작성 문제
class Solution12903 {
public String solution(String s) {
String answer = "";
if (s.length() % 2 == 0) {
answer += s.substring(s.length() / 2 - 1, s.length() / 2 + 1);
} else {
answer += s.substring(s.length() / 2, s.length() / 2 + 1);
}
return answer;
}
}
문제 : URL
문자열 A 를 오른쪽으로 한 글자씩 밀면서 문자열 B 가 되는 최소 횟수를 구하는 문제
class Solution120921 {
public int solution(String A, String B) {
StringBuilder sb = new StringBuilder(A);
if (A.equals(B)) {
return 0;
}
for (int i = 0; i < sb.length(); i++) {
sb.insert(0, sb.charAt(sb.length() - 1));
sb.deleteCharAt(sb.length() - 1);
if (sb.toString().equals(B)) {
return i + 1;
}
}
return -1;
}
}
insert(0, 마지막 문자) → deleteCharAt(마지막 인덱스) 로 오른쪽으로 한 칸 회전 구현length 번 회전해도 안 맞으면 더 이상 맞출 수 없으므로 -1 반환문제 : URL
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st1 = new StringTokenizer(br.readLine());
int[] n_arr = new int[n];
int m = Integer.parseInt(br.readLine());
StringTokenizer st2 = new StringTokenizer(br.readLine());
int[] m_arr = new int[m];
for (int i = 0; i < n; i++) {
n_arr[i] = Integer.parseInt(st1.nextToken());
}
for (int i = 0; i < m; i++) {
m_arr[i] = Integer.parseInt(st2.nextToken());
}
for (int i = 0; i < m; i++) {
boolean isMatch = false;
for (int j = 0; j < n; j++) {
if (m_arr[i] == n_arr[j]) {
isMatch = true;
break;
}
}
System.out.println(isMatch ? "1" : "0");
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st1 = new StringTokenizer(br.readLine());
int[] n_arr = new int[n];
int m = Integer.parseInt(br.readLine());
StringTokenizer st2 = new StringTokenizer(br.readLine());
int[] m_arr = new int[m];
for (int i = 0; i < n; i++) {
n_arr[i] = Integer.parseInt(st1.nextToken());
}
for (int i = 0; i < m; i++) {
m_arr[i] = Integer.parseInt(st2.nextToken());
}
for (int i = 0; i < m; i++) {
boolean isMatch = false;
for (int j = 0; j < n; j++) {
if (m_arr[i] == n_arr[j]) {
isMatch = true;
break;
}
}
System.out.println(isMatch ? "1" : "0");
}
}
}
문제 : URL
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = new int[arr1.length][arr1[0].length];
int arr1_value = 0;
int arr2_value = 0;
for(int i = 0; i < arr1.length; i++){
for(int j = 0; j < arr1[i].length; j++){
arr1_value = arr1[i][j];
arr2_value = arr2[i][j];
answer[i][j] = arr1_value+arr2_value;
}
}
return answer;
}
}
문제 : URL
import java.util.Arrays;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for (int i = 0; i < commands.length; i++) {
int iValue = 0;
int jValue = 0;
int kValue = 0;
iValue = commands[i][0] - 1;
jValue = commands[i][1];
kValue = commands[i][2] - 1;
int[] copy_arr = Arrays.copyOfRange(array, iValue, jValue);
Arrays.sort(copy_arr);
answer[i] = copy_arr[kValue];
}
return answer;
}
}
안녕하세요 백준입니다
하하하~ 존나쉽네요
열심히하세요 수고하세요