728x90

중앙은 노란색으로 칠해져있고 테두리 한줄만 갈색으로 칠해져있다.

갈색 타일의 개수와 노란색 타일의 개수가 주어질 때 가로 >=세로의 길이를 배열로 반환 

 

각 타일의 정사각형 넓이 1이므로 갈색과 노란색 타일의 합은 전체 직사각형의 넓이가 나온다. 

직사각형의 넓이는 가로*세로 이므로 

brown+yellow = answer[0]*answer[1] 과 같다. 

 

yellow는 중앙의 직사각형이므로 yellow의 가로 세로 길이는 yellow의 약수이다. 

 

곱하여 yellow가 되는 두 약수에 각각 가로, 세로 1씩 총 2를 더한 값이 전체 크기의 가로와 세로이다.

 

 

 

public int[] solution(int brown, int yellow) {

int[] answer = new int[2];

//brown+yellow = return[0]*return[1]

//yellow의 약수 (2,1)이라하면 약수 세트 가로와 세로에 각각 2씩 더한 값이 리턴

for(int i=1; i*i<=yellow;i++){

if(yellow%i==0){

int r = i;

int l = yellow/i;

if((r+2)*(l+2)==brown+yellow){

answer[0] = Math.max(r+2,l+2);

answer[1] = Math.min(r+2,l+2);

return answer;

}

}

}

return answer;

}

728x90

괄호가 ()로 바르게 짝지어졌으면 올바른 괄호 true 반환 그렇지 않으면 false 반환 

boolean solution(String s) {

boolean answer = true;

Stack<Character> stack = new Stack<>();

if(s.startsWith(")")||s.endsWith("(")||s.length()%2==1)return false;

char[] arr = s.toCharArray();

for(int i=0; i<arr.length;i++){

if(!stack.isEmpty()&&stack.peek()=='('&&arr[i]==')')stack.pop();

else stack.add(arr[i]);

}

if(stack.size()!=0)answer=false;

return answer;

}

stack의 peek 메소드로 맨 위 문자를 확인하여 ( 이고 다음 넣을 원소가 ) 이면 stack에서 꺼내고 

마지막에 스택이 비었으면 올바른 괄호인다. 

 

테스트 케이스는 통과하지만 효율성 검사에서 시간초과로 실패한다. 

)로 시작하거나 (로 끝나거나 문자의 개수가 홀수이면 짝을 지을 수 없어 계산할 필요 없이 false 반환하게 하였더니 성공 

 

boolean solution2(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;

}

스택을 사용하지 않고 배열로만 문제를 푸는 방법 

count가 음수가 된다는 것은 위에서 )로 시작한다는 것과 같은 이야기이다. 

'Java > Coding Test' 카테고리의 다른 글

기능 개발 문제 풀이  (0) 2023.10.07
카펫 문제 풀이  (0) 2023.10.06
크레인 인형뽑기 게임 문제 풀이  (0) 2023.10.04
로또의 최고 순위와 최저 순위 문제 풀이  (0) 2023.10.04
다트 게임 문제 풀이  (0) 2023.10.04
728x90

정사각형 모양의 틀에 여러 종류의 인형이 있고 1~5번 라인 중 몇번으로 이동해서 인형을 가져오는지 moves를 배열로 주어주면 인형을 가져와서 바구니에 담는다. 

이때 바구니의 맨 윗 인형과 내가 가져온 인형이 같은 종류라면 인형들을 없애고 없어진 인형의 수만큼 점수로 획득한다. 

public int solution(int[][] board, int[] moves) {

int answer = 0;

Map<Integer, ArrayList<Integer>> map = new HashMap<Integer, ArrayList<Integer>>();

for (int i = board.length - 1; i >= 0; i--) {

for (int j = 0; j < board[i].length; j++) {

if (board[i][j] == 0)

continue;

ArrayList<Integer> temp = map.getOrDefault(j, new ArrayList<Integer>());

temp.add(board[i][j]);

map.put(j, temp);

}

}

 

ArrayList<Integer> stack = new ArrayList<>();

for (int i = 0; i < moves.length; i++) {

if (map.get(moves[i] - 1).size() != 0) {

ArrayList<Integer> temp = map.get(moves[i] - 1);

if (stack.size() > 0 && stack.get(stack.size() - 1) == temp.get(temp.size() - 1)) {

answer += 2;

stack.remove(stack.size() - 1);

} else {

stack.add(temp.get(temp.size() - 1));

}

temp.remove(temp.size() - 1);

map.put(moves[i] - 1, temp);

}

}

return answer;

}

1~5열까지 ArrayList를 각각 가지고 ArrayList에는 각 열에 담긴 인형들의 종류를 int로 가지고 있다. 

stack은 뽑은 인형을 담는 바구니이다.

인형을 뽑아 stack의 윗 부분을 확인해서 같으면 stack의 윗부분을 없애고 점수를 2점 얻는다

그리고 인형을 뽑을 때마다 map에서 ArrayList를 수정해준다. 

'Java > Coding Test' 카테고리의 다른 글

카펫 문제 풀이  (0) 2023.10.06
올바른 괄호 문제 풀이  (1) 2023.10.05
로또의 최고 순위와 최저 순위 문제 풀이  (0) 2023.10.04
다트 게임 문제 풀이  (0) 2023.10.04
실패율 문제 풀이  (0) 2023.10.01
728x90

알아볼 수 없는 로또 번호는 0으로 하여 입력한 로또 번호 배열과 실제 로또 우승 번호를 비교하여 

가능한 최저 순위와 최고 순위를 반환

public int[] solution(int[] lottos, int[] win_nums) {

int[] answer = new int[2];

int zeroCount = 0;

Set<Integer> set = new HashSet<>();

for (int i = 0; i < lottos.length; i++) {

if(lottos[i]==0)zeroCount++;

else {

set.add(lottos[i]);

}

}

int nonZeroCount = 6-zeroCount;

for (int i = 0; i < win_nums.length; i++) {

set.add(win_nums[i]);

}

answer[1] = 7-(6+nonZeroCount-set.size());

answer[0] = 7-(6+nonZeroCount-set.size() + zeroCount);

if(answer[1]>=7)answer[1] = 6;

if(answer[0]>=7)answer[0] = 6;

return answer;

}

0이 아닌 수 중에서 win_nums와 일치하는 개수가 최저 일치 개수이고 

최저 일치 개수에 0이 모두 win_nums와 일치한다고 가정했을 때가 최고 일치 개수이다. 

 

일치 개수는 set에 win_nums와 lottos중 0이 아닌 수를 집어넣었을 때 중복을 허용하지 않는 set의 size()를 이용해 구하였다. 

 

구한 수는 맞힌 개수이지 순위가 아니기 때문에 7에서 빼주어 순위를 구하고 

만약 맞힌개 0 이라면 7에서 뺐을때 7이 나오지만 순위로는 1과 같은 6위 이므로 6으로 변경해준다

'Java > Coding Test' 카테고리의 다른 글

올바른 괄호 문제 풀이  (1) 2023.10.05
크레인 인형뽑기 게임 문제 풀이  (0) 2023.10.04
다트 게임 문제 풀이  (0) 2023.10.04
실패율 문제 풀이  (0) 2023.10.01
문자열 나누기 문제 풀이  (1) 2023.10.01

+ Recent posts