개발 공부~

[프로그래머스 기초] JAVA 문자열 2 본문

코딩테스트/프로그래머스

[프로그래머스 기초] JAVA 문자열 2

머밍 2024. 6. 30. 23:16
  • 글자 이어 붙여 문자열 만들기
class Solution {
    public String solution(String my_string, int[] index_list) {
        String answer = "";
        for(int i = 0; i < index_list.length; i++){
            answer += my_string.charAt(index_list[i]);
        }
        return answer;
    }
}

 

9로 나눈 나머지
class Solution {
    public int solution(String number) {

        int sum = 0;
        String[] numbers = number.split("");
        for(int i = 0; i < numbers.length; i++){
            sum += Integer.parseInt(numbers[i]);
        }
        return sum%9;
    }
}

 

  • 다른 풀이

문자열 number를 toCharArray()로 문자 배열로 변환
c - '0' 의미: 문자 c의 아스키 코드 값에서 문자 '0' 아스키 코드 값을 빼면 해당 문자의 숫자값

public int solution(String number) {
    int sum = 0;

    for (char c : number.toCharArray()) {
        sum += c - '0'; // char를 int로 변환하여 덧셈
    }

    return sum % 9;
}

 

  • 세로 읽기
class Solution {
    public String solution(String my_string, int m, int c) {
        String answer = "";
        
        for(int i = c-1; i < my_string.length(); i+=m) {
            if(i %m == c -1){
                answer += my_string.charAt(i);
            }
        }
        return answer;
    }
}

 

  • qr code

for (int i = r; i < code.length(); i += q) 도 가능~!

class Solution {
    public String solution(int q, int r, String code) {
        String answer = "";
        for(int i = 0; i < code.length(); i++){
            if(i%q==r){
                answer += code.charAt(i);
            }
        }
        return answer;
    }
}

 


substring()

String substring(int start, int end)
-> start부터 end-1까지 추출
--> end가 없을경우엔 start인덱스부터 끝까지 추출

 

  • 배열 만들기 5
import java.util.ArrayList;

class Solution {
    public int[] solution(String[] intStrs, int k, int s, int l) {
        ArrayList<Integer> answer = new ArrayList<>();

        for(String str : intStrs){
            int n = Integer.parseInt(s.substring(str,str+l));
            if(n>k){
                answer.add(n);
            }
        }
        return answer.stream().mapToInt(i->i).toArray();
    }
}

 

  • 부분 문자열 이어 붙여 문자열 만들기
class Solution {
    public String solution(String[] my_strings, int[][] parts) {
        String answer = "";
        for (int i = 0; i < my_strings.length; i++) {
            String str = my_strings[i];
            answer += str.substring(parts[i][0], parts[i][1]+1);
        }
        return answer;
    }
}

 

  • 문자열의 뒤의 n글자
class Solution {
    public String solution(String my_string, int n) {
        String answer = "";
        answer=my_string.substring(my_string.length()-n);
        
        return answer;
    }
}

 

  • 접미사 배열
import java.util.Arrays;

class Solution {
    public String[] solution(String my_string) {
        String[] answer = new String[my_string.length()];
        
        for(int i = 0; i < my_string.length(); i++) {
            answer[i] = my_string.substring(i);
        }

        Arrays.sort(answer);
        return answer;
    }
}

 

  • 문자열의 앞의 n글자
class Solution {
    public String solution(String my_string, int n) {
      
        return my_string.substring(0,n);
    }
}

 

 


접두사, 접미사

문자열.endsWith(suffix): 주어진 문자열이 특정 문자열 또는 접미사로 끝나는지 여부를 확인
문자열.startsWith(String prefix): 어진 접두사(prefix)로 문자열이 시작하는지 여부를 확인

 

  • 접미사인지 확인하기
class Solution {
    public int solution(String my_string, String is_suffix) {
        int answer = 0;
        if(my_string.endsWith(is_suffix)){
            answer = 1;
        }
        return answer;
    }
}

 

  • 접두사인지 확인하기
class Solution {
    public int solution(String my_string, String is_prefix) {
        int answer = 0;
        if(my_string.startsWith(is_prefix)){
            answer = 1;
        }
        return answer;
    }
}

 

  • 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기
class Solution {
    public String solution(String myString, String pat) {
        for(int i = myString.length(); i >=0; i--){
            String str = myString.substring(0,i);
            if(str.endsWith(pat)){
                return str;
            }
        }
        return "";
    }
}

 

-> 다른 풀이

lastIndexOf(문자열): 특정 문자나 문자열이 마지막으로 나타나는 위치를 찾는 데 사용
찾지 못하면 -1 반환
class Solution {
    public String solution(String myString, String pat) {
        String answer ="";
        int index = myString.lastIndexOf(pat);
        
        answer = myString.substring(0,index) +pat;
        
        return answer;
    }
}

 

  • 문자열이 몇 번 등장하는지 세기
class Solution {
    public int solution(String myString, String pat) {
        int answer = 0;

        for (int i =  myString.length(); i >= 0; i--) {
            String str = myString.substring(0,i);
            if(str.endsWith(pat)){
                answer++;
            }
        }
        return answer;
    }
}

 


StringBuilder -> for.문자열의 효율적 처리

  • 특징
    1. 가변 클래스 -> 길이나 내용 변경
    2. 동적 크기 조정 -> 기존 버퍼 재사용
    3. 멀티스레드 환경에서는 안전 X -> StringBuffer사용

 

  • 메서드
  1. append(문자): 끝에 추가
  2. insert(인덱스,문자): 특정 위치에 추가
  3. delete(시작,끝+1): 시작~끝까지의 요소 삭제
  4. replace(시작,끝+1,문자): 시작~끝까지의 문자열을 다른 문자로 대체
  5. reverse(): 뒤집기
  6. toString(): string으로 변환

 

  • 문자열 여러번 뒤집기
class Solution {
    public StringBuilder solution(String my_string, int[][] queries) {
        StringBuilder str = new StringBuilder(my_string);

        for(int[] query : queries) {
            int start = query[0];
            int end = query[1];

            StringBuilder re = new StringBuilder(str.substring(start, end+1));
            re.reverse();
            str.replace(start, end+1, re.toString());
        }
        return str;
    }
}

 

  • 문자열 뒤집기
class Solution {
    public String solution(String my_string, int s, int e) {

        StringBuilder str = new StringBuilder(my_string.substring(s, e+1));
        str.reverse();
        return my_string.substring(0,s)+str+ my_string.substring(e+1);
    }
}

 

 


알파벳 대소문자 관련

 

  • 대/문자로 바꾸기
class Solution {
    public String solution(String myString) {

        return myString.toUpperCase(); //대문자로 바꾸기
        
        return myString.toLowerCase(); //소문자로 바꾸기

    }
}

 

  • 배열에서 문자열 대소문자 변환하기  =>  배열 크기 잊지말기~
class Solution {
    public String[] solution(String[] strArr) {
        String[] answer = new String[strArr.length];
        for(int i = 0; i < strArr.length; i++) {
            if(i%2==0){
                answer[i] = strArr[i].toLowerCase();
            } else{
                answer[i] = strArr[i].toUpperCase();
            }
        }
        return answer;
    }
}

 

  • A 강조하기
문자열. replace(변경할 문자열, 대체할 문자열)
문자열. replaceAll(변경할 문자열, 대체할 문자열) -> 정규 표현식 사용함.

 

class Solution {
    public String solution(String myString) {
        myString = myString.toLowerCase();
        myString = myString.replace("a","A");
        return myString;
    }
}

 

  • 특정한 문자를 대문자로 바꾸기
class Solution {
    public String solution(String my_string, String alp) {
        my_string = my_string.replace(alp,alp.toUpperCase());
        return my_string;
    }
}

 

  • 원하는 문자열 찾기
문자열1.contains(문자열2): 문자열2가 문자열1에 포함되어있는지 확인 -> true or false
class Solution {
    public int solution(String myString, String pat) {
        int answer = 0;
        if(myString.toLowerCase().contains(pat.toLowerCase())){
            answer = 1;
        }
        return answer;
    }
}

 


공백으로 구분하기 1

split(): 자열을 특정 구분 자를 기준으로 분리할 때 사용하는 메서드
=> 분리된 결과는 문자열 배열로 반환

 

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

 

 

공백으로 구분하기 2

  • trim(): 문자열의 양 끝에 있는 공백을 제거하는 메서드
  • split("\s+"): 규 표현식을 사용하여 문자열을 여러 공백을 기준으로 분리
    \\s: 정규 표현식에서 공백
    +: 하나 이상의 공백
    -> \\s+: 하나 이상의 공백 문자열을 찾는 정규 표현식
class Solution {
    public String[] solution(String my_string) {

        return my_string.trim().split("\\s+");
    }
}