본문 바로가기

문자열42

[프로그래머스] 176962번 - 과제 진행하기 [Java] https://school.programmers.co.kr/learn/courses/30/lessons/176962 문제 설명 과제를 받은 루는 다음과 같은 순서대로 과제를 하려고 계획을 세웠습니다.과제는 시작하기로 한 시각이 되면 시작합니다.새로운 과제를 시작할 시각이 되었을 때, 기존에 진행 중이던 과제가 있다면 진행 중이던 과제를 멈추고 새로운 과제를 시작합니다.진행중이던 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행합니다.멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제부터 시작합니다.과제 계획을 담은 이차원 문자열 배열 plans가 매개변수로 주어질 때, 과제를 끝낸 순서대로 이름을 배열에 담아 return 하는 solution 함수를 완성해주세요. 제한사항3 ≤.. 2025. 3. 6.
[백준] 20920번 - 영단어 암기는 괴로워 [Java] https://www.acmicpc.net/problem/20920 1.  아이디어 Comparable을 이용한 정렬로 우선순위를 정하는 방식으로 해결할 수 있다.2. 문제풀이 정렬에 단어의 빈도수가 필요하므로 Map으로 입력을 받아서 단어와 개수를 세줬다. 이후 각 Entry를 활용해 노드 클래스를 만들고 이를 우선순위에 맞게 정렬하는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static class Node implements Comparable { String word; int cnt; public Node(String word, int cnt) { .. 2025. 2. 20.
[백준] 2810번 - 컵홀더 [Java] https://www.acmicpc.net/problem/2810 1.  아이디어 일반 좌석은 하나 늘어나면 컵홀더도 같이 늘어나서 왼쪽 컵홀더를 매칭시키면 커플 좌석만 남는 상태로 만들 수 있다. 이때 커플 좌석의 왼쪽 사람을 왼쪽 컵홀더에 매칭시키면 커플 좌석의 수 / 2 만큼의 사람이 남는데 맨 오른쪽에 한 명을 매칭시키면 커플 좌석의 수 / 2 - 1 만큼의 사람만 컵홀더를 사용할 수 없다.2. 문제풀이 StringTokenizer로 S를 기준으로 파싱을 해서 일반 좌석과 커플 좌석을 구분했고 ans에는 일반 좌석의 수, cnt에는 커플 좌석에서 컵홀더를 사용한 사람의 수를 기록했다.3. 코드 import java.io.*;import java.util.*;public class Main { .. 2025. 2. 13.
[백준] 9627번 - 문장 [Java] https://www.acmicpc.net/problem/9627 1.  아이디어 Map 자료구조와 StringBuilder로 숫자에 해당하는 글자를 구하는 방식으로 해결했다.2. 문제풀이 1부터 9와 10의 배수들의 글자를 미리 Map에 static 블록을 활용해서 저장했다. 이후 getStr 메서드에서 이미 저장된 숫자면 바로 반환하고 아니면 100 이상일 때 100의 자리까지 계산하고 십의 자리 수가 2보다 크면 십의 자리와 일의 자리 글자의 조합으로, 20보다 작으면 바로 Map에서 꺼내는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { private static final Map map = new HashMa.. 2025. 2. 12.
[백준] 1343번 - 폴리오미노 [Java] https://www.acmicpc.net/problem/1343 1.  아이디어 사전순으로 앞서려면 AAAA를 최대한 일찍 사용해야 한다.2. 문제풀이 StringTokenizer로 '.'을 구분자로 설정해서 파싱을 먼저 했다. 이후 토큰들에 대해 '.'이면 넘어가고 'X'의 뭉치면 AAAA를 먼저 적용해서 4로 나눈 몫만큼 먼저 쓰고 4로 나눈 나머지만큼 B를 사용했다. 이때 AAAA와 BB 둘 다 문자가 짝수개이므로 'X'의 뭉치의 길이가 홀수면 불가능한 케이스다. 3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { .. 2025. 2. 12.
[백준] 4949번 - 균형잡힌 세상 [Java] https://www.acmicpc.net/problem/4949 1.  아이디어 소괄호와 대괄호가 모두 서로 소거되면 되는 문제로 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.2. 문제풀이 StringTokenizer로 괄호를 기준으로 파싱한 후 괄호에 대해서 Stack으로 매핑을 시켜주는 방식으로 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Buffe.. 2025. 2. 11.
[백준] 25703번 - 포인터 공부 [Java] https://www.acmicpc.net/problem/25703 1.  아이디어 N이 1일 때, 2일 때 3이상일 때만 잘 구분해서 출력하면 되는 문제로 StringBuilder를 활용해서 포맷팅하면 간단하게 해결할 수 있다.2. 문제풀이 for문의 인덱스를 활용해서 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new Outp.. 2025. 2. 10.
[소프티어] 6255번 - 플레이페어 암호 [Java] https://softeer.ai/practice/6255 1.  아이디어 문자열을 통한 구현 문제로 열심히 구현하면 간단하게 해결할 수 있다.2. 문제풀이 먼저 주어진 메시지로 문자를 두 글자씩 나누는 조건을 구현했는데 for문에서 인덱스를 i+=2로 두 칸씩 건너가는 방식으로 두 글자를 뽑아서 다르면 StringBuilder에 넣고 같으면 X가 아니면 X를 넣고 X면 Q를 넣도록 했다. 이때 X 또는 Q를 넣으면 두번째 글자가 X 또는 Q로 대체되는 것이므로 i--로 인덱스를 하나 줄이도록 했다. 또 이때 삽입한 문자의 수를 저장해서 이후 기존 메시지와 삽입한 문자 수의 합이 홀수면 뒤에 X를 추가로 넣는 조건을 구현했다. 주어진 키를 표로 변환하는 것은 변환 후 남은 칸은 다시 A부터 없는 알파벳을.. 2025. 2. 7.
[백준] 1316번 - 그룹 단어 체커 [Java] https://www.acmicpc.net/problem/1316 1.  아이디어 각 알파벳에 대한 방문체크를 한 후 방문한 알파벳을 만났을 때 이전 알파벳과 현재 알파벳이 다르면 그룹 단어가 아님을 이용하면 간단하게 해결할 수 있다.2. 문제풀이 알파벳 소문자만 등장하므로 26칸 짜리 방문체크 배열을 만들고 첫번째 알파벳을 방문 체크한 뒤 두번째 알파벳부터 마지막 알파벳까지 방문한 알파벳을 만났을 때 이전 알파벳과 동일하지 않으면 종료하는 방식으로 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new Bu.. 2025. 2. 6.
[백준] 11365번 - !밀비 급일 [Java] https://www.acmicpc.net/problem/11365 1.  아이디어 StringBuilder의 reverse 메서드를 활용하면 간단하게 구현할 수 있다.2. 문제풀이 입력으로 END가 들어오면 반복문을 종료하고 아니면 reverse 메서드로 뒤집어서 Stringbuilder에 넣는 방식으로 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new Buf.. 2025. 2. 1.
[백준] 1254번 - 팰린드롬 만들기 [Java] https://www.acmicpc.net/problem/1254 1.  아이디어 현재 문자열이 팰린드롬이 아니면 뒤에 * 문자를 추가해서 *인 부분을 제외하고 팰린드롬이 되는지 판단하는 방식으로 해결했다.2. 문제풀이 팰린드롬은 문자열의 양 끝부터 중간까지 계속 문자가 일치하는지 비교하는 방식으로 구할 수 있다. 이때 한쪽 끝 문자가 *이면 그냥 넘어가는 방식으로 구현해서 팰린드롬이 될 때까지 반복하도록 구현했다.3. 코드 import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStr.. 2025. 2. 1.
[백준] 29198번 - 이번에는 C번이 문자열 [Java] https://www.acmicpc.net/problem/29198 1.  아이디어 입력의 각 문자열에 대해 문자들을 사전순으로 재배치한 후 문자열들을 다시 사전순으로 정렬하면 앞에서 K개의 문자열을 사전순으로 뽑아서 문자들을 사전순으로 재배치했을 때 사전순으로 가장 앞에 오는 문자열을 만들 수 있다.2. 문제풀이 String을 char 타입 배열로 변환하면 정렬을 통해 문자들을 재배치할 수 있다. 이를 StringBuilder로 합쳐서 다시 String으로 만드는 것을 활용해서 구현했다.3. 코드 import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException.. 2025. 1. 22.