728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
설계
- 문자열에서 같은 알파벳이 연속으로 나타나는 쌍을 제거
- 주어진 문자열 s를 순회하면서, 각 문자를 리스트에 추가
- 리스트에 이미 문자가 있고, 그 문자가 현재 문자와 같으면 연속된 쌍이므로 리스트에서 마지막 문자를 제거
- 문자열의 모든 문자를 처리한 후, 리스트가 비어 있으면 모든 연속 쌍이 제거된 것이므로 1을 반환하고, 그렇지 않으면 0을 반환
구현
코드
자바(Java)
// package pg12973;
import java.util.*;
public class Solution {
// public static void main(String[] args) {
// Solution solution = new Solution();
// String s = "baabaa"; // 테스트할 문자열
// // String s = "cdcd"; // 다른 테스트 케이스
// System.out.println(solution.solution(s)); // 결과 출력
// }
public int solution(String s) {
// 문자를 저장할 리스트
List<Character> list = new ArrayList<>();
for (char c : s.toCharArray()) {
// 리스트가 비어있지 않고 마지막 문자가 현재 문자와 같다면
if (list.size() > 0 && list.get(list.size() - 1) == c) {
list.remove(list.size() - 1); // 마지막 문자 제거
continue;
}
list.add(c); // 현재 문자 추가
// System.out.println(list); // 리스트 상태 출력 (디버깅용)
}
// 모든 문자가 제거되었는지 확인
int answer = list.size() == 0 ? 1 : 0; // 리스트가 비어있으면 1, 아니면 0 반환
return answer;
}
}
파이썬 (Python)
def solution(s):
_list = [] # 문자를 저장할 리스트 초기화
for c in s:
# 리스트가 비어있지 않고 마지막 문자가 현재 문자와 같다면
if _list and _list[-1] == c:
_list.pop(-1) # 마지막 문자 제거
continue
_list.append(c) # 현재 문자 추가
print(_list) # 리스트 상태 출력 (디버깅용)
# 모든 문자가 제거되었는지 확인
return 0 if len(_list) else 1 # 리스트가 비어있으면 1, 아니면 0 반환
# 테스트할 문자열
s = 'baabaa'
# s = 'cdcd'
print(solution(s)) # 결과 출력
'Problem_Solving' 카테고리의 다른 글
백준(BOJ) 2512 : 예산 (자바, 파이썬) (1) | 2024.01.24 |
---|---|
프로그래머스 : 이진 변환 반복하기 (자바, 파이썬) (1) | 2024.01.23 |
백준(BOJ) 1157 : 단어 공부 (자바, 파이썬) (0) | 2024.01.21 |
백준(BOJ) 1181 : 단어 정렬 (자바, 파이썬) (0) | 2024.01.20 |
백준(BOJ) 11650 : 좌표 정렬하기 (자바, 파이썬) (0) | 2024.01.19 |