반응형
9. 짝지어 제거하기

import java.util.*;
class Solution
{
public int solution(String s)
{
int answer = -1;
Stack<Character> stack = new Stack<>();
for(char ch : s.toCharArray()){
if(!stack.isEmpty() && stack.peek() == ch){
stack.pop();
} else{
stack.push(ch);
}
}
if(stack.isEmpty()){
answer = 1;
} else{
answer = 0;
}
return answer;
}
}
<작성한 코드>
stack을 하나 생성했다. 그 뒤 문자열 s를 char형으로 변환시킨 뒤 forEach문을 사용했다. if문을 사용해서 stack이 비어있지 않고 stack의 제일 최근값이 ch와 같으면 stack에서 값을 꺼냈다. 만약 같지 않다면 stack에 ch를 넣어줬다. 그 뒤 stack이 비어있으면 answer에 1일 넣고, 비어있지 않다면 0을 넣어주고 반환하였다.
10. 카펫

class Solution {
public int[] solution(int brown, int yellow) {
int[] answer = new int[2];
int total = brown + yellow;
for(int i=3; i<total; i++){
int j = total / i;
if(total%i == 0 && j >= 3){
int width = Math.max(i, j);
int height = Math.min(i, j);
int yellowCnt = (width - 2) * (height - 2);
if(yellowCnt == yellow){
answer[0] = width;
answer[1] = height;
break;
}
}
}
return answer;
}
}
<작성한 코드>
answer의 크기는 2로 잡았다. total은 격자의 총 개수이므로 갈색+노란색을 더해서 저장했다. 그 뒤 for문을 사용해서 3부터 total까지 비교했다. j는 total/i로 해줬다. 이유는 i, j를 곱해서 total이 나와야 한다. 그 뒤 조건으로 i가 total의 약수이고 j가 3보다 크다면 i, j 둘 중 큰 값을 width, 작은 값을 height에 넣어줬다. yellow의 개수는 (width-2) * (height-2)로 구해줬다. 이유는 노란색 격자 테두리는 갈색 격자를 제외한 안쪽이므로 가로, 세로에서 2를 빼주고 곱하면 노란색 격자수가 된다. 이렇게 구한 yellowCnt와 매개변수로 받은 yellow가 일치하면 answer [0]에는 width, answer [1]에는 height를 넣고 반복문을 종료시켰다. 마지막으로 answer을 반환한다.
반응형
'프로그래머스 문제풀이 > 알고리즘 (JAVA)' 카테고리의 다른 글
남건욱's 공부기록