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
'알고리즘 문제풀이 > Programmers' 카테고리의 다른 글
코딩테스트 연습 - 9일차 (1) | 2023.11.15 |
---|---|
코딩테스트 연습 - 8일차 (1) | 2023.11.14 |
코딩테스트 연습 - 6일차 (0) | 2023.11.11 |
코딩테스트 연습 - 5일차 (0) | 2023.11.10 |
코딩테스트 연습 - 4일차 (1) | 2023.11.10 |