peek() 메소드 사용한 문제풀이
41
1 asked
이전 글에 같은 내용의 질문을 확인했는데 해당 글에 다른 분이 댓글다신거 확인하고도 의문이 안풀려서요.
저는 peek() 메소드를 사용해서 코드를 작성했는데 첫번째 예시에 대한 답은 잘나오는데 두번째 예시의 답이 24가 아닌 26으로 나옵니다.
왜 26이 나오는지 도저히 모르겠어요..
혹시 peek() 메소드로는 해당 문제풀이가 힘든걸까요?
import java.util.Scanner;
import java.util.Stack;
public class IronRod {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String laser = scanner.next();
System.out.println(solution(laser));
}
private static int solution(String laser) {
int answer = 0;
Stack<Character> stack = new Stack<>();
// 선생님 풀이
for(int i = 0; i < laser.length(); i++){
if(laser.charAt(i) == '('){
stack.push('(');
} else {
stack.pop();
if(laser.charAt(i - 1) == '('){
answer += stack.size();
} else {
answer++;
}
}
}
// 제가 작성한 코드
for(char c : laser.toCharArray()){
if(c == '('){
stack.push(c);
} else {
if(stack.peek() == '('){
stack.pop();
answer += stack.size();
} else {
stack.pop();
answer++;
}
}
}
return answer;
}
}
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
문크님, 질문해주신 peek() 메소드에 관련된 문제점을 살펴보겠습니다.
작성하신 코드를 보면 peek() 메소드를 사용해서 문이 제대로 돌아가지 못 하는 상황을 예상할 수 있습니다. 특정 조건에서 peek() 메소드를 사용하는 것이 문제를 야기하는 이유는 스택의 가장 위에 있는 요소만 확인할 수 있고, 그 요소를 제거하는 것이 아니기 때문입니다.
문제가 발생하는 두 번째 예시에서 peek() 메소드를 사용하고 나서 스택의 최상단 요소를 제거해야 하는 상황인데, 이게 잘못 관리될 경우 계산된 answer 값에 영향을 줄 수 있습니다.
기존의 선생님 풀이 방법에서는 두 번째 조건인 if(laser.charAt(i - 1) == '(')을 통해 이전 문자를 직접 확인하여 스택의 크기 또는 증가 값을 결정하고 있습니다. 두 번째 예시에서 είναι \'방출'이라는 로직이 필요할 경우에 이는 적절히 작동할 수 있습니다.
따라서 다음과 같은 방법으로 수정하여 확인할 필요가 있습니다.
1. peek()을 사용하기 전에는 스택이 비어있지 않은지 반드시 체크합니다.
2. peek()으로 확인 후에는 필요에 따라 스택에서 pop() 작업을 잊지 말고 수행합니다.
이 점들을 유의하시어 로직을 수정해 보시면 도움이 될 것 같습니다. 추가로, peek() 메소드보다 문자 비교 방식(charAt)을 활용해 보시면 보다 직관적인 코드를 작성할 수 있습니다.
추가적인 참고자료가 필요하시면 아래의 이미지를 참고해 주세요:
-
아무쪼록 문제를 해결하시는데 조금이나마 도움이 되셨길 바랍니다!
봉우리 문제 질문입니다
0
70
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
57
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
65
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
63
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
77
2
6-7 강의에서
0
43
1
6-6. 장난꾸러기 질문 있습니다.
0
39
1
강의 수강후 코딩테스트
0
99
1
answer 변수 사용 여부
0
38
1
2중 for문
1
79
2
2-11. 임시반장정하기 (Runtime Error)
0
57
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
62
1
이런 풀이는 어떨까요
0
38
1
자바 스트림 방식의 효율성 질문 드립니다.
0
50
1
알고리즘 자료 구조들..
0
54
1
StringBuilder vs BufferdWriter
0
42
1
원더랜드(프림)
0
41
1
이런 코드는 어떤가요?
0
53
1
bfs 풀이
0
50
1
병합정렬
0
50
1
26강 임시반장 정하기에서 질문이 있습니다
0
38
1
이번달말에 완강 후 공부 방향
0
64
1
제가 이런 코테가 처음인데 공부방법을..ㅠ
1
104
1
20강 소수 에라토스테네스의 체 런타임 에러가 뜹니다
0
44
1

