본문 바로가기
알고리즘 문제풀이/Programmers

코딩테스트 연습 - 1일차

by 코도꼬마 2023. 11. 6.
JAVA SCRIPT SQL
9개 7개 14개

 

JAVA 

1. 각도기

각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.

class Solution {
    public int solution(int angle) {
    	//정답 변수
        int answer = 0;
        
        //90도 이하일 경우
        if(angle <= 90){
        	//90도일 경우
            if(angle == 90){
                //직각
                answer = 2;
            //0 초과 90 미만일 경우
            }else if(angle > 0 && angle <90){ 
            	//예각
                answer = 1;
            }
        //90도 초과 180도 이하일 경우
        }else if(angle > 90 && angle <= 180){        
        	//180도일 경우
            if(angle == 180){
            	//평각
                answer = 4;
            }else { //180 미만일 경우
            	//둔각
                answer = 3;
            }
        }
        
        return answer;
    }
}

 

2. 짝수의 합

정수 n이 주어질 때, n이하의 짝수를 모두 더한 값을 return 하도록 solution 함수를 작성해주세요.

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        //0부터 n까지 for문 돌리기
        for(int i=0; i<=n; i++){
            //i를 2로 나누었을 때 나머지가 0일 경우
            if(i%2 == 0){   
                //i 더하기
                answer += i;
            }  
        //for문 끝
        }
            
        
        return answer;
    }
}

 

3. 배열의 평균값

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        
        //numbers 배열의 크기만큼 for문 돌리기
        for(double num : numbers){
            //배열의 값을 하나씩 가져와서 answer에 더하기
            answer += num;
        //for문 끝            
        }
        
        //answer를 배열의 크기로 나누기
        answer = answer / numbers.length;
        
        return answer;
    }
}

 

4. 양꼬치

머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어졌을 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요.

class Solution {
    public int solution(int n, int k) {
        int answer = 0;
        
        answer = 12000*n + 2000*(k-(n/10));
        
        return answer;
    }
}

 

5. 편지

머쓱이는 할머니께 생신 축하 편지를 쓰려고 합니다. 할머니가 보시기 편하도록 글자 한 자 한 자를 가로 2cm 크기로 적으려고 하며, 편지를 가로로만 적을 때, 축하 문구 message를 적기 위해 필요한 편지지의 최소 가로길이를 return 하도록 solution 함수를 완성해주세요.

class Solution {
    public int solution(String message) {
        int answer = 0;
        
		//메시지의 길이 가져오기
		int len = message.length();
		
		//answer에 길이 * 2 하기
		answer = len*2;
        
        return answer;
    }
}

 

6. 피자 나눠 먹기 (1)

머쓱이네 피자가게는 피자를 일곱 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 주어질 때, 모든 사람이 피자를 한 조각 이상 먹기 위해 필요한 피자의 수를 return 하는 solution 함수를 완성해보세요.

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        answer = n/7 + (n%7 == 0 ? 0 : 1);
        
        return answer;
    }
}

 

7. 짝수 홀수 개수

정수가 담긴 리스트 num_list가 주어질 때, num_list의 원소 중 짝수와 홀수의 개수를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[2];
        
        //list의 크기 만큼 for문 돌리기
        for(int i=0; i<num_list.length; i++){
            //배열의 값이 짝수이면
            if(num_list[i]%2 == 0){                
                //answer[0]++;
                answer[0]++;
            }else { //아니면
                //answer[1]++;
                answer[1]++;
            }
            
            
        }
        return answer;
    }
}

 

8. 배열 뒤집기

정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length];
        int index = num_list.length-1;
        
        //num_list의 크기만큼 for문 돌리기
        for(int i=0; i<num_list.length; i++){
            //num_list[i]의 값을 answer[index]에 넣기
            answer[index] = num_list[i];
            //index--;
            index--;
        //for문 끝            
        }
        
        return answer;
    }
}

 

9.중앙값 구하기

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        
        //배열을 순서대로 정렬(버블소트 사용해보기)
        //배열의 크기만큼 for문 돌리기
        for(int i=0; i<array.length-1; i++){
            //배열의 크기만큼 for문 돌리기
            for(int j=0; j<array.length-i-1; j++){
                //배열의 i번째 값 가져오기
                int left = array[j];
                //배열의 i+1번째 값 가져오기
                int right = array[j+1];
                //i번째 값이 i+1번째 값보다 크면
                if(left > right){
                    //i번째에 i+1값 넣기
                    array[j] = right;
                    //i+1번째의 값에 임시값 넣기
                    array[j+1] = left;
                }
            //for문 끝   
            }
        //for문 끝                     
        }
        
        //배열을 2로 나눈 값의 index 값 answer에 넣기
        answer = array[array.length/2];
        
        return answer;
    }
}

 

 

 

 

JAVASCRIPT 

1. n의 배수

정수 num과 n이 매개 변수로 주어질 때, num이 n의 배수이면 1을 return n의 배수가 아니라면 0을 return하도록 solution 함수를 완성해주세요.

function solution(num, n) {
    var answer = 0;
    
    if(num%n == 0){
        answer = 1;
    }else{
        answer = 0;
    }
    
    return answer;
}

 

2. 정수 부분

실수 flo가 매개 변수로 주어질 때, flo의 정수 부분을 return하도록 solution 함수를 완성해주세요.

function solution(flo) {
    var answer = 0;
    
    answer = Math.trunc(flo);
    
    return answer;
}

 

3. 문자열의 앞의 n글자

문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string의 앞의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.

function solution(my_string, n) {
    var answer = '';
    
     answer = my_string.substring(0,n);
    
    return answer;
}

 

4. 길이에 따른 연산

정수가 담긴 리스트 num_list가 주어질 때, 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 10 이하이면 모든 원소의 곱을 return하도록 solution 함수를 완성해주세요.

function solution(num_list) {
    var answer = 0;
    
    // list의 길이가 10 이하이면
    if (num_list.length <= 10) {
        answer = 1;
        //list의 크기만큼 for문 돌리기
        for(var i=0; i<num_list.length; i++){
            // 배열의 값을 하나씩 가져와서 answer에 곱하기
            answer *= num_list[i];
        //for문 끝        
        }
    }
    //list이 길이가 11 이상이면
    if(num_list.length >= 11){
        //list의 크기만큼 for문 돌리기
        for(var i=0; i<num_list.length; i++){
            //배열의 값을 하나씩 가져와서 answer에 더하기
            answer += num_list[i];
        //for문 끝     
        }   
    }
    
    return answer;
}

 

5. n 번째 원소부터

정수 리스트 num_list와 정수 n이 주어질 때, n 번째 원소부터 마지막 원소까지의 모든 원소를 담은 리스트를 return하도록 solution 함수를 완성해주세요.

function solution(num_list, n) {
    var answer = [num_list.length-n];
    
    //새로운 배열의 index 값 선언
    var arrNum = 0;
    
    //n부터 list의 길이만큼 for문 돌리기
    for(var i=n-1; i<num_list.length; i++){
        //배열의 값을 하나씩 가져와 answer에 담기
        answer[arrNum] = num_list[i];
        //배열 index++
        arrNum++;
    //for문 끝        
    }
    
    return answer;
}

 

6. 조건에 맞게 수열 변환하기 1

정수 배열 arr가 주어집니다. arr의 각 원소에 대해 값이 50보다 크거나 같은 짝수라면 2로 나누고, 50보다 작은 홀수라면 2를 곱합니다. 그 결과인 정수 배열을 return 하는 solution 함수를 완성해 주세요.

function solution(arr) {
    var answer = [arr.length-1];
    
    //arr의 크기만큼 for문 돌리기
    for(var i=0; i<arr.length; i++){
        //값을 하나씩 가져와서 50보다 크거나 같은 찍수이면
        if(arr[i] >= 50 && arr[i]%2 == 0){
            //2로 나눠서 answer[i]에 넣기
            answer[i] = arr[i]/2;
        }else if(arr[i] < 50 && arr[i]%2 == 1){ //50보다 작은 홀수면
            //2를 곱해서 answer[i]에 넣기
            answer[i] = arr[i]*2;
        }else { //해당하는 값이 아니면
            //원래값 넣기
            answer[i] = arr[i];
        }
        
        
    //for문 끝        
    }
    
    return answer;
}

 

7. rny_string

'm'과 "rn"이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다. 문자열 rny_string이 주어질 때, rny_string의 모든 'm'을 "rn"으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

function solution(rny_string) {
    var answer = '';
    
    answer = rny_string.replaceAll('m','rn');
    
    return answer;
}

 

 

 

 

 

 

SQL 

 

TABLE1

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

 

1. 역순 정렬하기

동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

SELECT
    NAME
    ,DATETIME
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID DESC;

 

2. 상위 n개 레코드
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

SELECT
    NAME
FROM ANIMAL_INS 
ORDER BY DATETIME ASC
FETCH FIRST 1 ROW ONLY;

 

3. 이름이 있는 동물의 아이디

동물 보호소에 들어온 동물 중, 이름이 있는 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.

 

SELECT
    ANIMAL_ID
FROM ANIMAL_INS 
WHERE 1=1
AND NAME IS NOT NULL
ORDER BY ANIMAL_ID ASC;

 

4. 어린 동물 찾기

동물 보호소에 들어온 동물 중 젊은 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

SELECT
    ANIMAL_ID
    ,NAME
FROM ANIMAL_INS 
WHERE 1=1
AND INTAKE_CONDITION != 'Aged'
ORDER BY ANIMAL_ID;

 

5. 동물의 아이디와 이름

동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

SELECT
    ANIMAL_ID
    ,NAME
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

 

6. 여러 기준으로 정렬하기

동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

SELECT
    ANIMAL_ID
    ,NAME
    ,DATETIME
FROM ANIMAL_INS 
ORDER BY NAME, DATETIME DESC;

 

7. 아픈 동물 찾기

동물 보호소에 들어온 동물 중 아픈 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

SELECT
    ANIMAL_ID
    ,NAME
FROM ANIMAL_INS 
WHERE 1=1
AND INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID;

 

8. 이름이 없는 동물의 아이디

동물 보호소에 들어온 동물 중, 이름이 없는 채로 들어온 동물의 ID를 조회하는 SQL 문을 작성해주세요. 단, ID는 오름차순 정렬되어야 합니다.

SELECT
    ANIMAL_ID
FROM ANIMAL_INS 
WHERE 1=1
AND NAME IS NULL
ORDER BY ANIMAL_ID ASC;

 

9. 최댓값 구하기

가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

SELECT
    DATETIME AS 시간
FROM ANIMAL_INS 
ORDER BY DATETIME DESC
FETCH FIRST 1 ROW ONLY;

===============================================================================================

SELECT 
    MAX(DATETIME) AS 시간
FROM ANIMAL_INS;

 

 

TABLE2

다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO 테이블입니다. USER_INFO 테이블은 아래와 같은 구조로 되어있으며, USER_ID, GENDER, AGE, JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다.
GENDER 컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.

 

10. 나이 정보가 없는 회원 수 구하기

USER_INFO 테이블에서 나이 정보가 없는 회원이 몇 명인지 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 USERS로 지정해주세요.

SELECT
    COUNT(USER_ID) AS USERS
FROM USER_INFO 
WHERE 1=1
AND AGE IS NULL;

 

11. 조건에 맞는 회원수 구하기

GENDER 컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.

SELECT 
    COUNT(USER_ID) AS USERS
FROM USER_INFO 
WHERE 1=1
AND TO_CHAR(JOINED, 'YYYY') = '2021'
AND AGE >= 20 
AND AGE <= 29;

 

 

TABLE3

다음은 어느 의류 쇼핑몰에서 판매 중인 상품들의 정보를 담은 PRODUCT 테이블입니다. PRODUCT 테이블은 아래와 같은 구조로 되어있으며, PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다.
상품 별로 중복되지 않는 8자리 상품코드 값을 가지며, 앞 2자리는 카테고리 코드를 의미합니다.

 

12. 가장 비싼 상품 구하기

PRODUCT 테이블에서 판매 중인 상품 중 가장 높은 판매가를 출력하는 SQL문을 작성해주세요. 이때 컬럼명은 MAX_PRICE로 지정해주세요.

SELECT
    MAX(PRICE) AS MAX_PRICE
FROM PRODUCT;

 

 

TABLE4

다음은 식품공장의 정보를 담은 FOOD_FACTORY 테이블입니다. FOOD_FACTORY 테이블은 다음과 같으며 FACTORY_ID, FACTORY_NAME, ADDRESS, TLNO는 각각 공장 ID, 공장 이름, 주소, 전화번호를 의미합니다.

 

13. 강원도에 위치한 생산공장 목록 출력하기

FOOD_FACTORY 테이블에서 강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요. 이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.

SELECT
    FACTORY_ID
    ,FACTORY_NAME
    ,ADDRESS
FROM FOOD_FACTORY 
WHERE 1=1
AND ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID ASC;

 

 

TABLE5

다음은 식품창고의 정보를 담은 FOOD_WAREHOUSE 테이블입니다. FOOD_WAREHOUSE 테이블은 다음과 같으며 WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, TLNO, FREEZER_YN는 창고 ID, 창고 이름, 창고 주소, 전화번호, 냉동시설 여부를 의미합니다.

 

14. 경기도에 위치한 식품창고 목록 출력하기

FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.

SELECT
    WAREHOUSE_ID
    ,WAREHOUSE_NAME
    ,ADDRESS
    ,NVL(FREEZER_YN, 'N') AS FREEZER_YN
FROM FOOD_WAREHOUSE  
WHERE 1=1
AND ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID ASC;