peek() 메소드 사용한 문제풀이
43
投稿した質問数 1
이전 글에 같은 내용의 질문을 확인했는데 해당 글에 다른 분이 댓글다신거 확인하고도 의문이 안풀려서요.
저는 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;
}
}
回答 1
0
안녕하세요, 인프런 AI 인턴입니다.
문크님, 질문해주신 peek() 메소드에 관련된 문제점을 살펴보겠습니다.
작성하신 코드를 보면 peek() 메소드를 사용해서 문이 제대로 돌아가지 못 하는 상황을 예상할 수 있습니다. 특정 조건에서 peek() 메소드를 사용하는 것이 문제를 야기하는 이유는 스택의 가장 위에 있는 요소만 확인할 수 있고, 그 요소를 제거하는 것이 아니기 때문입니다.
문제가 발생하는 두 번째 예시에서 peek() 메소드를 사용하고 나서 스택의 최상단 요소를 제거해야 하는 상황인데, 이게 잘못 관리될 경우 계산된 answer 값에 영향을 줄 수 있습니다.
기존의 선생님 풀이 방법에서는 두 번째 조건인 if(laser.charAt(i - 1) == '(')을 통해 이전 문자를 직접 확인하여 스택의 크기 또는 증가 값을 결정하고 있습니다. 두 번째 예시에서 είναι \'방출'이라는 로직이 필요할 경우에 이는 적절히 작동할 수 있습니다.
따라서 다음과 같은 방법으로 수정하여 확인할 필요가 있습니다.
1. peek()을 사용하기 전에는 스택이 비어있지 않은지 반드시 체크합니다.
2. peek()으로 확인 후에는 필요에 따라 스택에서 pop() 작업을 잊지 말고 수행합니다.
이 점들을 유의하시어 로직을 수정해 보시면 도움이 될 것 같습니다. 추가로, peek() 메소드보다 문자 비교 방식(charAt)을 활용해 보시면 보다 직관적인 코드를 작성할 수 있습니다.
추가적인 참고자료가 필요하시면 아래의 이미지를 참고해 주세요:
-
아무쪼록 문제를 해결하시는데 조금이나마 도움이 되셨길 바랍니다!
봉우리 문제 질문입니다
0
72
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
58
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
66
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
64
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
77
2
6-7 강의에서
0
44
1
6-6. 장난꾸러기 질문 있습니다.
0
40
1
강의 수강후 코딩테스트
0
100
1
answer 변수 사용 여부
0
38
1
2중 for문
1
79
2
2-11. 임시반장정하기 (Runtime Error)
0
58
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
64
1
이런 풀이는 어떨까요
0
38
1
자바 스트림 방식의 효율성 질문 드립니다.
0
50
1
알고리즘 자료 구조들..
0
54
1
StringBuilder vs BufferdWriter
0
42
1
원더랜드(프림)
0
42
1
이런 코드는 어떤가요?
0
54
1
bfs 풀이
0
50
1
병합정렬
0
51
1
26강 임시반장 정하기에서 질문이 있습니다
0
40
1
이번달말에 완강 후 공부 방향
0
67
1
제가 이런 코테가 처음인데 공부방법을..ㅠ
1
106
1
20강 소수 에라토스테네스의 체 런타임 에러가 뜹니다
0
45
1

