728x90

다항식이 문자열로 주어질 때 연산을 반환 

연산자는 '+'만 존재하고 1차항과 상수항만 주어진다.

 

public String solution(String polynomial) {

String answer = "";

String[] a = polynomial.split(" ");

int x = 0;

int y = 0;

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

if(a[i].contains("x")) {

x+=Integer.parseInt((a[i].substring(0,a[i].length()-1).equals(""))?"1":a[i].substring(0,a[i].length()-1));

}

else y+=Integer.parseInt(a[i]);

}

return x == 0 ? y==0 ? "0" : y+"" : x==1 ? y==0 ? "x" : "x + "+y : y==0 ? x+"x" : x+"x + "+y;

}

1차항과 상수항을 따로 구하고 

0x 또는 1x, 0 등이 나오지 않게 걸러준다.

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

저주의 숫자 3 문제풀이  (0) 2023.09.17
문자열 밀기 문제풀이  (0) 2023.09.17
OX 퀴즈 문제풀이  (0) 2023.09.17
연속된 수의 합 문제풀이  (0) 2023.09.17
안전지대 문제풀이  (0) 2023.09.17
728x90

X [+/-] Y = Z

연산식이 문자열로 주어질때 연산값이 맞다면 O 틀리면 X 를 반환한 문자열 배열을 반환

 

public String[] solution(String[] quiz) {

String[] answer = new String[quiz.length];

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

String[] a =quiz[i].split(" ");

if(a[1].equals("+")) {

if(Integer.parseInt(a[0])+Integer.parseInt(a[2])==Integer.parseInt(a[4])) {

answer[i]="O";

}else answer[i]="X";

}else {

if(Integer.parseInt(a[0])-Integer.parseInt(a[2])==Integer.parseInt(a[4])) {

answer[i]="O";

}else answer[i]="X";

}

}

return answer;

}

숫자와 연산자 사이는 공백으로 비워져 있으므로 공백으로 숫자와 연산자를 구분 

 

연산자는 +또는 -밖에 없으므로

a[0]+a[2]*a[1] = a[4]로 하고 

a[1]가 +이면 1로, -이면 -1로 바꾸어주면 좀더 간결한 식을 만들 수 있다.

 

public String[] solution2(String[] quiz) {

String[] answer = new String[quiz.length];

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

String[] a = quiz[i].split(" ");

answer[i]=(Integer.parseInt(a[0]) + Integer.parseInt(a[2])*((a[1].equals("+"))?1:-1) == Integer.parseInt(a[4]))? "O":"X";

}

return answer;

}

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

문자열 밀기 문제풀이  (0) 2023.09.17
다항식 더하기 문제풀이  (0) 2023.09.17
연속된 수의 합 문제풀이  (0) 2023.09.17
안전지대 문제풀이  (0) 2023.09.17
겹치는 선분의 길이 문제풀이  (0) 2023.09.17
728x90

연속된 수의 개수와 합이 주어질 때 연속된 수의 배열을 반환 

public int[] solution(int num, int total) {

int[] answer = new int[num];

//(a+a+num-1)*num/2=total

//2*a+num-1= total*2/num

//2*a = total*2/num+1-num

int a = (total*2/num+1-num)/2;

for(int i=0; i<num; i++){

answer[i] = a++;

}

return answer;

}

a는 연속하는 수 중 시작하는 숫자 

 

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

다항식 더하기 문제풀이  (0) 2023.09.17
OX 퀴즈 문제풀이  (0) 2023.09.17
안전지대 문제풀이  (0) 2023.09.17
겹치는 선분의 길이 문제풀이  (0) 2023.09.17
이진수 더하기 문제풀이  (0) 2023.09.17
728x90

이차배열이 주어질 때 1을 갖는 인덱스의 대각선, 상하좌우는 모두 위험지역이다

안전지대의 개수를 반환 

 

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

int answer = 0;

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

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

if(board[i][j]==1) {

if(j>0)board[i][j-1]=danger(board[i][j-1]);

if(j!=board.length-1)board[i][j+1]=danger(board[i][j+1]);

if(i>0&&j>0)board[i-1][j-1]=danger(board[i-1][j-1]);

if(i>0&&j!=board.length-1)board[i-1][j+1]=danger(board[i-1][j+1]);

if(j>0&&i!=board.length-1)board[i+1][j-1]=danger(board[i+1][j-1]);

if(j!=board.length-1&&i!=board.length-1)board[i+1][j+1]=danger(board[i+1][j+1]);

if(i!=board.length-1)board[i+1][j]=danger(board[i+1][j]);

if(i>0)board[i-1][j]=danger(board[i-1][j]);

}

}

}

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

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

if(board[i][j]==0)answer++;

}

}

return answer;

}

public int danger(int x) {

if(x==1) return 1;

else return 2;

}

 

위험지역을 모두 1로 설정하면 다음 연산시 1을 폭탄지역으로 보아 연쇄적으로 위험지역으로 카운트 

> 폭탄이 없는 폭탄 주변의 위험지역은 2로 변경 후 안전지대 계산시 0을 카운트

 

문제는 모서리 부근에 폭탄이 있으면 인덱스 범위를 벗어나기 때문에 

위험지역을 설정할 때 상하좌우, 대각선이 범위 내인지 체크하거나 

 

주어진 배열보다 양옆, 위아래로 2씩 큰 배열을 만들고 count 할때는 주어진 배열만큼만 count 한다. 

 

public int solution2(int[][] board) {

int answer = 0;

int[][] boardEx = new int[board.length+2][board.length+2];

for (int i = 1; i <= board.length; i++) {

for (int j = 1; j <= board.length; j++) {

boardEx[i][j] = board[i-1][j-1];

}

}

for (int i = 1; i < boardEx.length; i++) {

for (int j = 1; j < boardEx[i].length; j++) {

if(boardEx[i][j]==1) {

boardEx[i][j-1]=danger(boardEx[i][j-1]);

boardEx[i][j+1]=danger(boardEx[i][j+1]);

boardEx[i-1][j-1]=danger(boardEx[i-1][j-1]);

boardEx[i-1][j+1]=danger(boardEx[i-1][j+1]);

boardEx[i+1][j-1]=danger(boardEx[i+1][j-1]);

boardEx[i+1][j+1]=danger(boardEx[i+1][j+1]);

boardEx[i+1][j]=danger(boardEx[i+1][j]);

boardEx[i-1][j]=danger(boardEx[i-1][j]);

}

}

}

for (int i = 1; i < boardEx.length-1; i++) {

for (int j = 1; j <boardEx[i].length-1; j++) {

if(boardEx[i][j]==0)answer++;

}

}

return answer;

}

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

OX 퀴즈 문제풀이  (0) 2023.09.17
연속된 수의 합 문제풀이  (0) 2023.09.17
겹치는 선분의 길이 문제풀이  (0) 2023.09.17
이진수 더하기 문제풀이  (0) 2023.09.17
한번만 등장한 문자 문제풀이  (0) 2023.09.17

+ Recent posts