극동대학교\AI컴퓨터공학과\JAVA/프로그래머스 코딩 기초 트레이닝

[프로그래머스, LV.0] 문자열 바꿔서 찾기

sundori 2024. 1. 6. 23:57

목차

    #1 문자열 바꿔서 찾기

    문제 설명

    문자 "A"와 "B"로 이루어진 문자열 myString pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중  pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.

    제한사항

    • 1 ≤ myString의 길이 ≤ 100
    • 1 ≤ pat의 길이 ≤ 10
      • myString과 pat는 문자 "A"와 "B"로만 이루어진 문자열입니다.

    입출력 예

    myString pat result
    "ABBAA" "AABB" 1
    "ABAB" "ABAB" 0

    #2 알고리즘 및 코드

    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    
    public class Main {
        public static void main(String[] args) {
            String myString = "ABBAA";
            String pat = "AABB";
            Solution solution = new Solution();
            System.out.println(solution.solution(myString, pat));
        }
    }
    
    class Solution {
        public int solution(String myString, String pat) {
            // stream의 각 요소를 처리하며 리스트에 추가
            List<Character> list = new ArrayList<>();
            for(int i = 0; i < myString.length(); i++){
                if(myString.charAt(i) == 'A')
                    list.add('B');
                else
                    list.add('A');
            }
            return list.stream().map(String::valueOf).collect(Collectors.joining()).contains(pat) ? 1 : 0;
        }
    }
    • 이 코드는 List를 이용하여 반전된 문자를 추가하고 스트림을 이용하여 문자열로 변환하는 과정을 통해 pat가 있는지 없는지 판별한다.
    class Solution {
        public int solution(String myString, String pat) {
            // stream의 각 요소를 처리하며 리스트에 추가
            List<Character> list = myString.chars()
                    .mapToObj(c -> (char) (c == 'A' ? 'B' : 'A'))
                    .collect(Collectors.toList());
    
            return list.stream().map(String::valueOf).collect(Collectors.joining()).contains(pat) ? 1 : 0;
        }
    }