문제: https://school.programmers.co.kr/learn/courses/30/lessons/12981
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 코드
import java.util.*;
class Solution {
public int[] solution(int n, String[] words) {
int[] answer = new int[2];
Stack <String> s = new Stack<>();
for(int i = 0; i < words.length; i++) {
if(i % n == 0) answer[1]++;
if(s.isEmpty()) s.push(words[i]);
else if(s.indexOf(words[i]) != -1 || words[i].length() == 1 ||
s.peek().charAt(s.peek().length() - 1) != words[i].charAt(0)) {
answer[0] = i % n + 1;
break;
}
else s.push(words[i]);
if(i + 1 == words.length) answer[1] = 0;
}
return answer;
}
}
2. 설명
문제를 해결하기 위해 가장 최근에 입력한 내용과 이미 입력된 내용을 조회해야 하기에 Stack을 활용하여 문제를 해결하기로 했습니다.
for(int i = 0; i < words.length; i++) {
if(i % n == 0) answer[1]++;
반복문을 통해서 words의 모든 문장에 접근하며 i의 수가 n으로 나눠지면 모든 사람들의 턴이 지난 뒤 다시 처음 순서대로 진행한다는 것을 의미하기에 answer[1]의 값을 증가를 통해서 표시해 줍니다.
if(s.isEmpty()) s.push(words[i]);
else if(s.indexOf(words[i]) != -1 || words[i].length() == 1 ||
s.peek().charAt(s.peek().length() - 1) != words[i].charAt(0)) {
answer[0] = i % n + 1;
break;
}
else s.push(words[i]);
현재 Stack이 비어있는 상태라면 푸시를 진행합니다. s.indexOf() 메서드를 통해서 이미 입력된 단어인지 그리고 단어의 길이가 1이 아닌지, 마지막에 입력된 단어로 시작한 단어인지 확인을 해준 뒤 이 모든 경우가 아니라면 Stack에 푸시해 주는데 만약 한 가지라도 해당된다면 현재 차례를 answer[0]에 저장 후 반복문을 중단합니다.
if(i + 1 == words.length) answer[1] = 0;
만약 중단되지 않고 반복문이 끝까지 진행되었다면 answer[1]에 진행 횟수의 값을 0으로 저장합니다. 탈락자가 생기지 않으면 [0, 0]을 반환해야 하기 때문입니다.
3. 정리
- Stack을 사용한다.
- 진행 횟수는 반복문 시작 시 확인한다.
- Stack이 비어있다면 push하고 아니라면 조건들을 확인한다.
- 종료되는 조건이라면 어떤 사람의 순서에 중단되었는지 저장한다.
- 영어 끝말잇기가 끝까지 진행되면 진행 횟수의 값을 0으로 초기화한다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 134240번: 푸드 파이트 대회 [Java] (0) | 2023.07.19 |
---|---|
프로그래머스 - 68644번: 두 개 뽑아서 더하기 [Java] (0) | 2023.07.18 |
프로그래머스 - 12915번: 문자열 내 마음대로 정렬하기 [Java] (0) | 2023.07.17 |
프로그래머스 - 81301번: 숫자 문자열과 영단어 [Java] (0) | 2023.07.16 |
프로그래머스 - 17681번: [1차] 비밀지도 [Java] (0) | 2023.07.15 |