baekjoon/String 7

백준 9935번 : 문자열 폭발 [자바]

🧫 문제 분석 ✔️ 출처문자열 폭 골드 4 📖 문제 문제에 나온대로 반복해서 삭제 시도 --- 메모리, 시간 초과Stack으로 풀어보면 되지 않을까 싶어서 Stack으로 풀었다.  그리고 바로 더 좋은 방법이 있나 생각해봤는데 StringBuilder에 문자 하나씩 넣고 폭발 문자 끝단어와 현재 탐색하는 단어가 같으면 폭발 문자가 있을 가능성이 있으므로 StringBuilder.length - 폭발문자 길이 부터 끝까지를 추출해서 폭발 문자와 같은 지 확인하고 맞다면 삭제하는 식으로 하면된다.  🔅 1차 Stack 문제 풀이 (600ms)import java.io.*;import java.util.*;public class Main { public static void main(String[]..

baekjoon/String 2025.03.15

백준 2179번 : 비슷한 단어 [자바]

🧫 문제 분석 ✔️ 출처비슷한 단 골드 4 📖 문제  문자열 정렬 문제다. 급한 마음으로 하니 안풀리다가 생각을 정리하고 설계한다음 풀어보니 바로 풀렸다.O(n^2)으로 풀 수 없을 것 같아서 입력받은 단어들을 저장한 배열과 사전순으로 정렬한 리스트를 만들고, TreeSet으로 풀었다. 주어진 단어들의 접두사 (단어 앞부분 공통적으로 나타나는 부분문자열)가 최대가되는 두쌍을 찾아야한다.  문제는 접두사 길이가 최대인 경우가 여러개일때 앞 인덱스에 있는 쌍을 출력해야한다는 것이다. 따라서 사전순으로 정렬한 리스트를 돌면서 i, i+1 번째 단어의 접두사 길이를 탐색하고, 접두사의 길이가 max 보다 길다면 이전의 max길이였던 단어들을 모두 제거하기 위해 TreeSet을 초기화하고새롭게 갱신하게 해준 ..

baekjoon/String 2025.03.14

백준 20437번 : 문자열 게임 2 [자바]

🧫 문제 분석✔️ 출처문자열 게임 2 골드 5 📖 문제 주어진 문자열의 알파벳의 위치 처리 문제다.  처음에는 투포인터로 하면 되겠나 싶었는데 말이 안되는 반례가 너무많이 생각나서 이 방법은 버리고, 각 알파벳의 ASCII 코드에서 'a'의 ASCII 코드를 빼서 0~25 범위의 인덱스로 변환한 후,배열(ArrayList[] list)의 해당 인덱스에 현재 문자열에서 해당 알파벳이 등장한 위치(인덱스)를 저장했다. 그리고 각 알파벳이 k개 이상이면k개씩 묶어서 거리를 구한 후 max, min 값을 갱신했다. 예제를 예시로w = "abaaaba" k = 3 일때list[0] = [0, 2, 3, 4, 6]; // 0 = 'a'알파벳 - 'a' 로 얻은 a알파벳의 인덱스 list[1] = [1, 5]..

baekjoon/String 2025.03.09

백준 4659번 : 비밀번호 발음하기 [자바]

🧫 문제 분석 ✔️ 출처비밀번호 발음하기 실버 5 📖 문제 정규표현식 연습하고싶어서 풀게된 문제다.정규표현식은 매번 까먹기때문에 많이 해봐야하고 잘 숙지해야한다.  3번째 조건 ee, oo는 허용하면서 나머지 같은 글자 연속 2번을 제외하는게 조금 어려웠다. (결국 검색해봄..) 🔅 문제 풀이import java.io.*;import java.util.*;public class Main { static String[] eval = {"is acceptable.", "is not acceptable."}; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader..

baekjoon/String 2025.03.06

백준 1036번 : 36진수 자바

🧫 문제 분석 ✔️ 출처36진수 골드 1 📖 문제  주어진 입력 중 Z로 k개 만큼 바꾸고 모두 더한 값이 최댓값이 되게 구하고, 그 값을 36진수로 변환하여 출력 정말정말 많은 시간을 썼고, 다른 블로그의 앞부분만 슬쩍봐서 큰 수를 어떻게 다루는지 참고하면서 풀었다. 결국에는 내가 생각한 아이디어와 로직이 맞았고, 큰 수를 다루는 BigInteger를 잘 안써서 떠오르지 못했던 것이다..   나의 경우 0~9 는 배열 각 인덱스 0~9에 1:1로 사용A~Z는 -'7'을 해주면 'A' - '7' = 10이 되므로배열을 35까지 만든 후 배열의 인덱스 0~9 A~Z까지 0~35로 사용하였다. 이 문제에서 중요한 것은Z로 바꾼 K개의 숫자가 무엇이냐다.맨 앞자리 수를 Z로 만든다고 무조건 최댓값이 나오는..

baekjoon/String 2024.08.28

백준 5525번 : IOIOI 자바

🧫 문제 분석 ✔️ 출처IOIOI 실버 1📖 문제주어진 문자열에서 IOI 패턴으로 나오는 문자열의 개수를 찾는 문제이다. 몰랐는데 서브태스크는  여러가지 채점 방식이 있나보다. 배점이 50점 2개가 있다.  처음에는 match를 썼다가 너무 오래걸려서 50점 받았다.  IOI를 찾고 카운팅 + 1 하고 현 위치에서 +2로 이동한 후 (이러면 IOI 에서 마지막 I자리로 간다.)또 현 위치에서부터 +2 위치까지 IOI를 찾는다. 이런식으로 카운팅한 개수가 n과 같다면 answer 에 +1을 하고 count를 - 1 해주는데 이유는 겹쳐져있는 IOI를 빠르게 구별하기 위함이다. 예를들어n = 2라 하자IOIOI 를 찾아야한다. IOIOIOI 가 있다면 i = 0 일 때 IOI 찾고 카운팅 +1 위치는 i..

baekjoon/String 2024.08.24

백준 5430번 : AC 자바

🧫 문제 분석✔️ 출처AC 골드 5 📖 문제 문자열, 구조 문제이다.덱이 생각이 안나서 그냥 투 포인터로 풀었다..ㅎㅎㅎㅎ 문제에서 핵심은 문자열 파싱 : [1,2,3,4] 이런 식으로 입력이 주어지기에 이를 적절하게 파싱한다.R : 배열 순서 뒤집기D : 첫번째 요소 삭제빈 배열에 D를 사용할 경우 에러 발생 [1,2] 에서 DD 를 하면 [] 을 출력한다. error가 아니다.   문자열 파싱은 subString으로 앞 뒤의  ' [ ' , ' ] ' 를 짤라내고split으로 정규표현식을 사용하여 [^0-9]로 숫자가 아닌 모든 것을 기준으로 짤라 문자열 배열을 만들었고이를 int 배열에 파싱하여 저장하였다.  두 개의 포인터를 사용하여 풀었다. 자세한건 코드를 참고해주면 좋을 것 같다.  🔅 ..

baekjoon/String 2024.08.21