카카오톡 모의 문제입니다.
1번
import java.util.Scanner;
public class Test {
/* 문제1
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한사항
N의 범위 : 100,000,000 이하의 자연수
*/
public static int solution(int n) {
int answer = 0;
while(n>0){
answer += (n%10);
n = n/10;
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.println("자릿수의 합 : " +solution(a));
}
}
2번
import java.util.Scanner;
public class Test {
/* 문제2
* 길이가 n인 배열에 1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는지를 확인하려고 합니다.
1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는 경우 true를, 아닌 경우 false를 반환하도록 함수 solution을 완성해주세요.
제한사항
배열의 길이는 10만 이하입니다.
배열의 원소는 10만 이하의 자연수입니다.
*/
public static boolean solution(int[] arr) {
boolean answer = true;
int[] chk = new int[arr.length+1];
for(int i=0; i<arr.length; i++) {
if(arr[i]<1 || arr[i]>arr.length) { //n이하의 자연수여야 함으로 arr[i]값이 arr.length보다 크면 false
answer = false;
return answer;
}
chk[arr[i]]++; //chk배열을 통해 n이하의 자연수가 있는 지 확인
}
for(int i=1; i<=arr.length; i++) {
if(chk[i]>1) {
answer = false;
return answer;
}
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int arr[] = new int[a];
for(int i=0; i<a; i++) {
arr[i] = (int) (Math.random()*10)+1;
//System.out.print(arr[i]+ " ");
}
System.out.println("결과는 " +solution(arr));
}
}
3번
public class Test {
/* 문제3
* 직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 구하려고 합니다.
* 점 3개의 좌표가 들어있는 배열 v가 매개변수로 주어질 때, 직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 return 하도록 solution 함수를 완성해주세요.
* 단, 직사각형의 각 변은 x축, y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.
*
* 제한사항
v는 세 점의 좌표가 들어있는 2차원 배열입니다.
v의 각 원소는 점의 좌표를 나타내며, 좌표는 [x축 좌표, y축 좌표] 순으로 주어집니다.
좌표값은 1 이상 10억 이하의 자연수입니다.
직사각형을 만드는 데 필요한 나머지 한 점의 좌표를 [x축 좌표, y축 좌표] 순으로 담아 return 해주세요.
*/
public int[] solution(int[][] v) {
int[] answer = {0,0};
for(int i=0; i<3; i++) { //3개의 점에 대해 수행하기에 반복문을 3번 돌린다.
answer[0] ^= v[i][0]; //x좌표는 주어진 좌표에 x좌표를 xor하고
answer[1] ^= v[i][1]; //y좌표는 주어진 좌표에 y좌표를 xor하면 나머지 한 점의 좌표가 들어가게 된다.
}
return answer;
}
}
4번
/*문제4
* 1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다.
* 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요.
* (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)
제한사항
표(board)는 2차원 배열로 주어집니다.
표(board)의 행(row)의 크기 : 1000 이하의 자연수
표(board)의 열(column)의 크기 : 1000 이하의 자연수
표(board)의 값은 1또는 0으로만 이루어져 있습니다.
*/
int dp[][] = new int[1001][1001];
public int solution(int[][] board){
int answer=0;
for(int i=1; i<=board.length; i++){
for(int j=1; j<=board[0].length; j++){
if(board[i-1][j-1] != 0){
dp[i][j] = Math.min(dp[i][j-1], Math.min(dp[i-1][j], dp[i-1][j-1])) + 1;
answer = Math.max(answer, dp[i][j]);
}
}
}
return answer*answer;
}
}