(프로그래머스/Java) 짝지어 제거하기

2021. 5. 24. 03:13·CodingTest

난이도: Level 2

프로그래밍 언어: Java

문제명: 짝지어 제거하기

푼일자: 2021년 5월

 

URL : https://programmers.co.kr/learn/courses/30/lessons/12973

 

Solution.cs

문제를 이해하고 코드작성 후 결과가 정상적으로 나오는지 확인 해 보았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public int solution(String s) {
    ArrayList<String> array = new ArrayList<>(Arrays.asList(s.split("")));
 
    int i = 0;
    while(i < array.size() - 1) {
        if (array.get(i).equals(array.get(i+1))) {
            array.remove(i);
            array.remove(i);
            i = 0;
            continue;
        }
        i++;
    }
 
    if (array.size() == 0) return 1;
    else return 0;
}
Colored by Color Scripter
cs

 

결과는 정상적으로 나오는 것을 확인했다. 그러나...

 

여기서는 효율성 테스트도 확인을 한다!

정확성 테스트에서도 결과를 도출하는데 꽤나 시간이 걸린 케이스가 있었다.

 

이걸 어덯게 효율적으로 코드를 수정할 수 있을까?

프로그래머스의 질문하기를 살펴본 후 Stack을 사용해 보라는 글을 보고 Stack 이라는 클래스를 검색해서 찾아보았다.

 

간단히 Stack 클래스는 

  • 데이터 추가 : .push(...)
  • 최근 추가된 데이터 삭제 : .pop()
  • 최근 추가된 데이터 조회 : .peek()

이러한 함수를 제공한다. 위 함수를 이용해 다음과 같이 작성하였다.

 

1
2
3
4
5
6
7
8
Stack<Character> stack = new Stack<>();
 
for (char c : s.toCharArray()) {
    if (!stack.isEmpty() && stack.peek() == c) stack.pop();
    else stack.push(c);
}
 
return stack.isEmpty() ? 1 : 0;
cs

 

Character 인 Stack 을 하나 선언을 해준 뒤 .toCharArray() 를 사용하면 String 이 한 문자씩 char 형식으로 배열에 쌓여 반환하게 된다.

 

그 반환된 배열을 이용해 반복문을 돌리고, 먼저 stack 이 비어있는지 확인을 하고 비어있다면 채우고 다음 배열.

이제 비어있지 않으니 AND 조건으로 stack 에 가장 최근에 쌓인 문자가 현재 배열의 index 에 위치한 문자가 동일한 문자인지 확인을 한다. 동일한 문자라면 지금 쌓인 문자 하나를 제거하는 절차를 반복하여서 일치하지 않는 문자는 stack 에 쌓이게 되고, 모든 문자를 한번씩 검사를 한 후에 쌓인 Stack 이 있는지 확인하여 결과를 1과 0으로 반환한다.

 

Stack 이라는 클래스는 처음 접해보는데, 편리한 기능인 것 같다.

반응형
저작자표시 비영리 (새창열림)
'CodingTest' 카테고리의 다른 글
  • (백준/Java) 별 찍기 모음 (1,3,5,7,9,13,15,17,21)
  • (백준/Java) 15947번 : 아기 석환 뚜루루 뚜루
  • (백준/Java) 14624번 : 전북대학교
  • 코딩테스트 뉴비 백준 19-S Sogang ACM-ICPC Team Application (Bronze) 문제집 시작!
Kua
Kua
정보 공유, 개인 정리 공간 입니다.
  • Kua
    Kua's Miscellaneous
    Kua
    • 분류 전체보기 (185)
      • 대문 (2)
      • Tips (25)
        • Chrome (2)
        • Windows (4)
        • IDE (3)
        • 기타 (16)
      • CodingTest (44)
      • Language (20)
        • PHP (5)
        • C# (7)
        • Java (1)
        • Kotlin (7)
      • Framework & Runtime (16)
        • SpringBoot (12)
        • Node.js (2)
        • Vue.js (1)
        • Gradle (1)
      • DevOps (13)
        • Linux (1)
        • Docker (4)
        • Kubernetes (2)
        • Apache Kafka (1)
        • AWS (1)
      • 일상다반사 (53)
        • 도서 (1)
        • 개발 (8)
        • 후기 - IT (7)
        • 후기 - 일상 (13)
        • 차가리 (4)
        • 방송통신대학교 (4)
        • 음식 (2)
      • Games (12)
        • Minecraft (7)
        • VR (2)
        • 그외 (3)
  • 최근 글

  • 인기 글

  • 태그

    c#
    bronze1
    Algorithm
    codingtest
    갤럭시
    github
    Kotlin
    Windows
    백준
    bronze2
    알고리즘
    후기
    코딩테스트
    java
    Spring Boot
    spring
    error
    minecraft
    Plugin
    Silver5
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.0
Kua
(프로그래머스/Java) 짝지어 제거하기
상단으로

티스토리툴바