스택/큐 문제지만 내 방식대로 풀어보았다.
class Solution {
boolean solution(String s) {
boolean answer = true;
int tmp0 = 0; // '(' 일때 ++ , ')' 일때 -- 할 변수
if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
for(int i = 0; i<s.length();i++) { // 0번째 자리부터 마지막자리까지 반복한다.
char tmp = s.charAt(i); // s의 i번째 문자를 가져온다.
if(tmp0 == 0 && tmp == ')') return false; // '('가 나오지 않았는데 ')'가 나오면 리턴 "()))((()" 차단
if(tmp == '(')tmp0++;
if(tmp == ')')tmp0--;
}
if(tmp0 != 0) return false; // for문이 다 끝났는데 tmp0이 0이 아니면 리턴 false
return answer; //모든 검사 후 정상적으로 괄호가 있을때 true 리턴
}
}
채점결과 모두 통과했다.
다른 사람의 풀이를 보자..
class Solution {
boolean solution(String s) {
boolean answer = false;
int count = 0;
for(int i = 0; i<s.length();i++){
if(s.charAt(i) == '('){
count++;
}
if(s.charAt(i) == ')'){
count--;
}
if(count < 0){
break;
}
}
if(count == 0){
answer = true;
}
return answer;
}
}
이분도 스택이나 큐를 쓰지 않고 문제를 풀었다.
나랑 비슷하지만, 좀더 깔끔한것 같다.
if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
나는 for문 전에 처음이나 마지막을 먼저 검사하는 부분이 있는데
이는 효율성을 나름 생각해서 “()()()()()()()()()()()()(” 이런 경우에
끝까지 검사한 후에야 리턴하기때문에 넣었던 것인데..
다른사람것도 돌려보니 속도면에서는 크게 차이는 없는것 같다.(?)
아래는 스택을 이용한 방법인것 같다.
스택은 실사용해본적이 없어서 잘 몰랐는데 이참에 공부해봐야겠다.
import java.util.Stack;
class Solution {
boolean solution(String s) {
boolean answer = true;
String res = "YES";
Stack<Integer> st = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
st.push(1);
} else if (s.charAt(i) == ')') {
if (st.isEmpty()) {
answer = false;
break;
} else {
st.pop();
}
}
}
if(!st.isEmpty()) {
answer = false;
}
System.out.println(res);
return answer;
}
}
Stack 사용법
Stack<String> stack = new Stack<>();
stack.add("스택추가");
stack.push("스택추가");
String tmp = stack.pop();
스택 사용법은 push, pop만 알고 넘어가자.
stack.add()와 stack.push()의 차이점도 알게되었는데,
add() 의 리턴값은 boolean
push() 의 리턴값은 <E>이다.
즉, add()는 성공실패를 받고
push는 넣은값을 다시 리턴받는것이다.
스택/큐 문제지만 내 방식대로 풀어보았다.
class Solution {
boolean solution(String s) {
boolean answer = true;
int tmp0 = 0; // '(' 일때 ++ , ')' 일때 -- 할 변수
if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
for(int i = 0; i<s.length();i++) { // 0번째 자리부터 마지막자리까지 반복한다.
char tmp = s.charAt(i); // s의 i번째 문자를 가져온다.
if(tmp0 == 0 && tmp == ')') return false; // '('가 나오지 않았는데 ')'가 나오면 리턴 "()))((()" 차단
if(tmp == '(')tmp0++;
if(tmp == ')')tmp0--;
}
if(tmp0 != 0) return false; // for문이 다 끝났는데 tmp0이 0이 아니면 리턴 false
return answer; //모든 검사 후 정상적으로 괄호가 있을때 true 리턴
}
}
채점결과 모두 통과했다.
다른 사람의 풀이를 보자..
class Solution {
boolean solution(String s) {
boolean answer = false;
int count = 0;
for(int i = 0; i<s.length();i++){
if(s.charAt(i) == '('){
count++;
}
if(s.charAt(i) == ')'){
count--;
}
if(count < 0){
break;
}
}
if(count == 0){
answer = true;
}
return answer;
}
}
이분도 스택이나 큐를 쓰지 않고 문제를 풀었다.
나랑 비슷하지만, 좀더 깔끔한것 같다.
if(s.charAt(0) == ')') return false; //처음부터 ')'가 나오면 바로 리턴
if(s.charAt(s.length()-1) == '(') return false; //마지막에 '('가 나오면 바로 리턴
나는 for문 전에 처음이나 마지막을 먼저 검사하는 부분이 있는데
이는 효율성을 나름 생각해서 “()()()()()()()()()()()()(” 이런 경우에
끝까지 검사한 후에야 리턴하기때문에 넣었던 것인데..
다른사람것도 돌려보니 속도면에서는 크게 차이는 없는것 같다.(?)
아래는 스택을 이용한 방법인것 같다.
스택은 실사용해본적이 없어서 잘 몰랐는데 이참에 공부해봐야겠다.
import java.util.Stack;
class Solution {
boolean solution(String s) {
boolean answer = true;
String res = "YES";
Stack<Integer> st = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
st.push(1);
} else if (s.charAt(i) == ')') {
if (st.isEmpty()) {
answer = false;
break;
} else {
st.pop();
}
}
}
if(!st.isEmpty()) {
answer = false;
}
System.out.println(res);
return answer;
}
}
Stack 사용법
Stack<String> stack = new Stack<>();
stack.add("스택추가");
stack.push("스택추가");
String tmp = stack.pop();
스택 사용법은 push, pop만 알고 넘어가자.
stack.add()와 stack.push()의 차이점도 알게되었는데,
add() 의 리턴값은 boolean
push() 의 리턴값은 <E>이다.
즉, add()는 성공실패를 받고
push는 넣은값을 다시 리턴받는것이다.
'JAVA' 카테고리의 다른 글
JSTL이란? JSTL 사용법, 라이브러리 추가 등 (0) | 2023.05.01 |
---|---|
JSTL 변수 선언, 값넣기, 삭제, 출력 (0) | 2023.05.01 |
[SQL]LIKE 문자열검색, 사용법,패턴,예시 (0) | 2022.09.08 |
[SQL]NULLIF(표현식1,표현식2)설명, 사용방법, 예시 (0) | 2022.09.08 |
속성(Attribute)이란? (0) | 2022.09.08 |