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

코딩테스트 연습 - 7일차

by 코도꼬마 2023. 11. 13.
  JAVA SCRIPT SQL
7일차 3개 6개 4개
6일차 4개 8개 6개
5일차 7개 8개 9개
4일차 9개 10개 9개
3일차 11개 10개 8개
2일차 10개 8개 7개
1일차 9개 7개 14개

 

JAVA 

1. 7의 개수

머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        
        //배열의 크기만큼 for문 돌기
        for(int i=0; i<array.length; i++){
            //배열의 값을 가져와 
            int num = array[i];
            
            //0이 아닐 때 까지 while문 돌기
            while(num != 0){
                //배열의 값을 10으로 나눴을 때 나머지가 0이 아니고
                if((num%10) != 0){
                    //그 값을 7로 나눴을 때 나머지가 0이면
                    if((num%10)%7 == 0){
                        //answer++
                        answer++;
                    }                 
                }
                //배열의 값/10
                num /= 10;   
            }
        //for문 끝
            
        }
        
        return answer;
    }
}

 

2. 소인수분해

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

import java.util.*;

class Solution {
    public int[] solution(int n) {
        //동적 할당을 위해 list 선언
        List<Integer> list = new ArrayList<Integer>();
        
        //2부터 n까지 for문 돌기
        for(int i=2; i<=n; i++){
            //n%i이 0이면
            if(n%i == 0){
                //n%i가 0이 될 때까지 i로 나눠줌 
                while(n%i == 0){
                    n /= i;
                }
                //list에 i 추가
                list.add(i);
            }
        }
        
        //배열에 담기
        int[] answer = list.stream().mapToInt(i -> i).toArray();
        
        return answer;
    }
}

 

3. 잘라서 배열로 저장하기

문자열 my_str n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.

class Solution {
    public String[] solution(String my_str, int n) {
        
        //my_str의 길이를 반올림한 값 가져오기
		int len = (my_str.length() + n - 1) / n;
        //배열의 크기를 위의 값으로 설정
        String[] answer = new String[len];
        
        //my_str index 변수 선언
        int index1 = 0;
        //answer index 변수 선언
        int index2 = 0;
        
        //my_str의 길이만큼 while문 돌기
        while(index1 < my_str.length()){
            //answer에 index~index+n 만큼 잘라서 넣기 
            //index+n이 my_str.length()보다 클 경우 my_str.length()으로 자르기
            answer[index2] = my_str.substring(index1,Math.min(index1 + n, my_str.length()));
            
            //index1+n
            index1 += n;
            //index2+1
            index2 += 1;
        //while문 끝            
        }
        
        return answer;
    }
}

 

 

 

 

SCRIPT

1. 간단한 식 계산하기

문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.

function solution(binomial) {
    var answer = 0;
    
    
    //공백을 기준으로 배열로 자르기
    let arr = binomial.split(" ");
    
    //연산자의 값을 가져와 배열의 값을 연산하여 aswer에 저장
    if(arr[1] === "+"){
        //문자열 변수의 경우 앞에 '+'를 붙여주면 숫자 취급
        answer = (+arr[0]+(+arr[2]));
    }else if(arr[1] === "-"){
        answer = arr[0]-arr[2];
    }else{
        answer = arr[0]*arr[2];
    }
    
    return answer;
}

 

2. 문자열 잘라서 정렬하기

문자열 myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요.

단, 빈 문자열은 반환할 배열에 넣지 않습니다.

function solution(myString) {
    var answer = [];
    
    answer = myString.split("x").sort().filter(e => e !== "");
    
    return answer;
}

 

3. 특별한 이차원 배열 1

정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.

  • arr[i][j] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.
function solution(n) {
    var answer = [];
    
    //n만큼 for문 돌기
    for(let i=0; i<n; i++){
        //answer 안에 담을 배열 선언
        let arr = [];
        //n만큼 for문 돌기
        for(let j=0; j<n; j++){
            //index i에는 1 넣기
            if(i == j){
                arr[j] = 1;
            //나머지는 0 넣기
            }else {
                arr[j] = 0;                
            }
        //for문 끝  
        }
        //answer에 arr 담기
        answer.push(arr);
    //for문 끝        
    }
    
    return answer;
}

 

4 덧셈식 출력하기

두 정수 a, b가 주어질 때 다음과 같은 형태의 계산식을 출력하는 코드를 작성해 보세요.

a + b = c
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = line.split(' ');
}).on('close', function () {
    console.log(input[0] + " + " + input[1] + " = " + (Number(input[0]) + Number(input[1])));
});

 

5. 접미사 배열

어떤 문자열에 대해서 접미사는 특정 인덱스부터 시작하는 문자열을 의미합니다. 예를 들어, "banana"의 모든 접미사는 "banana", "anana", "nana", "ana", "na", "a"입니다.
문자열 my_string이 매개변수로 주어질 때, my_string의 모든 접미사를 사전순으로 정렬한 문자열 배열을 return 하는 solution 함수를 작성해 주세요.

function solution(my_string) {
    var answer = [];
    
    //my_string의 길이만큼 for문 돌기
    for(let i=0; i<my_string.length; i++){
        //index i부터 문자열의 끝까지 잘라서 배열에 넣기
        answer.push(my_string.slice(i,my_string.length));
    //for문 끝        
    }
    
    //배열 정렬
    answer.sort();
    
    return answer;
}

 

6. 배열 만들기 3

정수 배열 arr와 2개의 구간이 담긴 배열 intervals가 주어집니다.

intervals는 항상 [[a1, b1], [a2, b2]]의 꼴로 주어지며 각 구간은 닫힌 구간입니다. 닫힌 구간은 양 끝값과 그 사이의 값을 모두 포함하는 구간을 의미합니다.

이때 배열 arr의 첫 번째 구간에 해당하는 배열과 두 번째 구간에 해당하는 배열을 앞뒤로 붙여 새로운 배열을 만들어 return 하는 solution 함수를 완성해 주세요.

function solution(arr, intervals) {
     answer = [];
    
    //intervals[0]의 값에 맞춰 arr을 잘라 arr2에 넣기
    let arr2 = arr.slice(intervals[0][0],intervals[0][1]+1);
    //intervals[1]의 값에 맞춰 arr을 잘라 arr3에 넣기
    let arr3 = arr.slice(intervals[1][0],intervals[1][1]+1);
    
    //arr2와 arr3 합치기
    answer = arr2.concat(arr3);
    
    return answer;
}

 

 

 

 

SQL

1. 대여 기록이 존재하는 자동차 리스트 구하기

-- 코드를 입력하세요
SELECT
    H.CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY H
LEFT JOIN CAR_RENTAL_COMPANY_CAR C ON H.CAR_ID = C.CAR_ID
WHERE 1=1
AND TO_CHAR(START_DATE,'MM') = '10'
AND C.CAR_TYPE = '세단'
GROUP BY H.CAR_ID
ORDER BY H.CAR_ID DESC;

 

2. 없어진 기록 찾기

-- 코드를 입력하세요
SELECT 
    O.ANIMAL_ID
    ,O.NAME
FROM ANIMAL_OUTS O 
LEFT JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE 1=1
AND I.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID;

 

3. 조건에 맞는 사용자 정보 조회하기

-- 코드를 입력하세요
WITH OVER_THREE AS 
(
SELECT WRITER_ID, COUNT(WRITER_ID)
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(WRITER_ID) >= 3
)

SELECT
    U.USER_ID
    ,U.NICKNAME
    ,(U.CITY||' '||U.STREET_ADDRESS1||' '||U.STREET_ADDRESS2) AS 전체주소
    ,REGEXP_REPLACE(U.TLNO, '(.{3})(.+)(.{4})', '\1-\2-\3') AS 전화번호
FROM USED_GOODS_USER U
INNER JOIN OVER_THREE O ON U.USER_ID = O.WRITER_ID
ORDER BY U.USER_ID DESC;

 

4. 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

-- 코드를 입력하세요
SELECT 
    CAR_ID
    ,MAX(CASE
            WHEN '2022-10-16' BETWEEN TO_CHAR(START_DATE,'YYYY-MM-DD') AND TO_CHAR(END_DATE,'YYYY-MM-DD') THEN '대여중' 
            ELSE '대여 가능' 
         END) AS AVAILABILITY
FROM  CAR_RENTAL_COMPANY_RENTAL_HISTORY 
GROUP BY CAR_ID
ORDER BY CAR_ID DESC