JAVA | SCRIPT | SQL | |
5일차 | 7개 | 8개 | 9개 |
4일차 | 9개 | 10개 | 9개 |
3일차 | 11개 | 10개 | 8개 |
2일차 | 10개 | 8개 | 7개 |
1일차 | 9개 | 7개 | 14개 |
JAVA
1. 숫자 찾기
정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
class Solution {
public int solution(int num, int k) {
int answer = 0;
//num을 String으로 변환
String strNum = String.valueOf(num);
//k의 값이 있으면
if(strNum.indexOf(String.valueOf(k)) > -1){
//k의 index + 1
answer = strNum.indexOf(String.valueOf(k))+1;
}else { //없으면
//-1
answer = strNum.indexOf(String.valueOf(k));
}
return answer;
}
}
2. 문자열 정렬하기 (2)
영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때, my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요.
import java.util.*;
class Solution {
public String solution(String my_string) {
String answer = "";
//my_string을 소문자로 변경
my_string = my_string.toLowerCase();
//my_string을 배열로 변환
String[] arr = my_string.split("");
//정렬
Arrays.sort(arr);
//answer에 저장
answer = String.join("",arr);
return answer;
}
}
3. 합성수 찾기
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
class Solution {
public int solution(int n) {
int answer = 0;
//n만큼 for문 돌기
for(int i=1; i<=n; i++){
//약수 cnt 변수
int cnt = 0;
//i만큼 for문 돌기
for(int k=1; k<=i; k++){
//i을 k로 나누었을 때 나머지가 0이면
if(i%k == 0){
//cnt++
cnt++;
}
//for문 끝
}
//약수가 3개 이상이면
if(cnt >= 3){
//answer++
answer++;
}
//for문 끝
}
return answer;
}
}
4. 중복된 문자 제거
문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.
class Solution {
public String solution(String my_string) {
String answer = "";
//my_string의 크기만큼 for문 돌기
for(int i=0; i<my_string.length(); i++){
//중복값이 없으면
if(answer.indexOf(my_string.charAt(i)) == -1){
//해당 값 추가
answer += my_string.charAt(i);
}
//for문 끝
}
return answer;
}
}
5. 2차원으로 만들기
정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.
num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.
class Solution {
public int[][] solution(int[] num_list, int n) {
int[][] answer = new int[num_list.length/n][n];
//index값을 저장할 변수 선언
int index =0;
//num_list/n 만큼 for문 돌기
for(int i=0; i<num_list.length/n; i++){
//n 만큼 for문 돌기
for(int k=0; k<n; k++){
//answer[i][k]에 num_list[index] 값 담기
answer[i][k] = num_list[index];
//index++
index++;
//for문 끝
}
//for문 끝
}
return answer;
}
}
6. A로 B 만들기
문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.
import java.util.*;
class Solution {
public int solution(String before, String after) {
int answer = 0;
//문자열을 배열로 변환
String[] arrBe = before.split("");
String[] arrAf = after.split("");
//배열 정렬
Arrays.sort(arrBe);
Arrays.sort(arrAf);
//배열을 문자열로 변환
before = String.join("",arrBe);
after = String.join("",arrAf);
//두 문자열이 같으면
if(before.equals(after)) {
//1
answer = 1;
}else { //다르면
//0
answer = 0;
}
return answer;
}
}
7. A로 B 만들기
머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
모스부호는 다음과 같습니다.
class Solution {
public String solution(String letter) {
String answer = "";
//morse의 key값을 배열로 만들기
String[] morse = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
//letter를 공백을 기준으로 배열로 변환
String[] arr = letter.split(" ");
//arr의 값을 하나씩 꺼내서
for (String word : arr) {
//morse 배열과 비교
for (int i = 0; i < morse.length; i++) {
//같을 경우
if(word.equals(morse[i])) {
//answer에 i+'a'값 저장
answer += Character.toString(i+'a');
}
//for문 끝
}
//for문 끝
}
return answer;
}
}
SCRIPT
1. 뒤에서 5등까지
정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
function solution(num_list) {
var answer = [];
//num_list 정렬
num_list.sort(function(a,b){
return a-b;
});
//0~5까지 answer에 복사
answer = num_list.slice(0,5);
return answer;
}
2. 주사위 게임 1
1부터 6까지 숫자가 적힌 주사위가 두 개 있습니다. 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같습니다.
- a와 b가 모두 홀수라면 a2 + b2 점을 얻습니다.
- a와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다.
- a와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다.
두 정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
function solution(a, b) {
var answer = 0;
//둘다 홀수이면
if(a%2 != 0 && b%2 != 0){
answer = a*a+b*b;
//하나만 홀수이면
}else if(a%2 != 0 || b%2 != 0){
answer = 2*(a+b);
//둘다 홀수가 아니면
}else if(a%2 == 0 && b%2 == 0){
answer = Math.abs(a-b);
}
return answer;
}
3. 글자 이어 붙여 문자열 만들기
문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
function solution(my_string, index_list) {
var answer = '';
//배열의 크기만큼 for문 돌기
for(let i=0; i<index_list.length; i++){
//배열의 값과 같은 my_string index의 값 answer에 저장
answer += my_string.charAt(index_list[i]);
//for문 끝
}
return answer;
}
function solution(my_string, index_list) {
var answer = '';
//map 사용해보기
answer = index_list.map(i => my_string[i]).join('');
return answer;
}
4. 부분 문자열 이어 붙여 문자열 만들기
길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_string[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
function solution(my_strings, parts) {
var answer = '';
//배열의 크기만큼 for문 돌기
for(let i=0; i<my_strings.length; i++){
//parts[i]의 값들을 가져와 my_strings[i]의 값을 잘라 answer에 추가
answer += my_strings[i].slice(parts[i][0],parts[i][1]+1);
//for문 끝
}
return answer;
}
function solution(my_strings, parts) {
var answer = '';
//map 사용하기
answer = parts.map(([s,e],i) => {
return my_strings[i].slice(s,e+1);
}).join('');
return answer;
}
5. 5명씩
최대 5명씩 탑승가능한 놀이기구를 타기 위해 줄을 서있는 사람들의 이름이 담긴 문자열 리스트 names가 주어질 때, 앞에서 부터 5명씩 묶은 그룹의 가장 앞에 서있는 사람들의 이름을 담은 리스트를 return하도록 solution 함수를 완성해주세요. 마지막 그룹이 5명이 되지 않더라도 가장 앞에 있는 사람의 이름을 포함합니다.
function solution(names) {
var answer = [];
//배열의 크기만큼 5씩 커지는 for문 돌기
for(let i=0; i<names.length; i+=5){
//해당 값을 answer에 추가
answer.push(names[i]);
//for문 끝
}
return answer;
}
6. 배열의 길이에 따라 다른 연산하기
정수 배열 arr과 정수 n이 매개변수로 주어집니다. arr의 길이가 홀수라면 arr의 모든 짝수 인덱스 위치에 n을 더한 배열을, arr의 길이가 짝수라면 arr의 모든 홀수 인덱스 위치에 n을 더한 배열을 return 하는 solution 함수를 작성해 주세요.
function solution(arr, n) {
var answer = [];
if(arr.length%2 == 0){
for(let i=0; i<arr.length; i++){
if(i%2 == 0){
answer.push(arr[i])
}else{
answer.push(arr[i]+n);
}
}
}else {
for(let k=0; k<arr.length; k++){
if(k%2 == 0){
answer.push(arr[k]+n);
}else{
answer.push(arr[k])
}
}
}
return answer;
}
7. l로 만들기
알파벳 소문자로 이루어진 문자열 myString이 주어집니다. 알파벳 순서에서 "l"보다 앞서는 모든 문자를 "l"로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요.
function solution(myString) {
var answer = '';
//myString을 배열로 변환
let arr = myString.split('');
//배열의 크기만큼 for문 돌기
for(let i=0; i<arr.length; i++){
//해당 값의 아스키코드 가져와서 'l'의 아스키코드보다 작을 경우
if(arr[i].charCodeAt() < 'l'.charCodeAt()){
//해당 값을 'l'로 변경
arr[i] = 'l';
}
//for문 끝
}
//배열을 answer에 저장
answer = arr.join('');
return answer;
}
8. 순서 바꾸기
정수 리스트 num_list와 정수 n이 주어질 때, num_list를 n 번째 원소 이후의 원소들과 n 번째까지의 원소들로 나눠 n 번째 원소 이후의 원소들을 n 번째까지의 원소들 앞에 붙인 리스트를 return하도록 solution 함수를 완성해주세요.
function solution(num_list, n) {
var answer = [num_list.length];
//n번째 까지의 원소를 담은 배열
let arr1 = num_list.slice(0,n);
//n이후의 원소를 담은 배열
let arr2 = num_list.slice(n,num_list.length);
//합치기
answer = arr2.concat(arr1);
return answer;
}
SQL
1. NULL 처리하기
-- 코드를 입력하세요
SELECT
ANIMAL_TYPE
,NVL(NAME,'No name') AS NAME
,SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
2. DATETIME에서 DATE로 형 변환
-- 코드를 입력하세요
SELECT
ANIMAL_ID
,NAME
,(TO_CHAR(DATETIME, 'YYYY-MM-DD')) AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
3. 가격이 제일 비싼 식품의 정보 출력하기
-- 코드를 입력하세요
SELECT
PRODUCT_ID
,PRODUCT_NAME
,PRODUCT_CD
,CATEGORY
,PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
FETCH FIRST 1 ROW ONLY;
4. 중성화 여부 파악하기
-- 코드를 입력하세요
SELECT
ANIMAL_ID
,NAME
,CASE
WHEN SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O'
WHEN SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O'
ELSE 'X'
END AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
5. 고양이와 개는 몇 마리 있을까
-- 코드를 입력하세요
SELECT
ANIMAL_TYPE
,COUNT(ANIMAL_ID) AS count
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY (CASE WHEN ANIMAL_TYPE = 'Cat' THEN 0 ELSE 1 END);
6. 입양 시각 구하기(1)
-- 코드를 입력하세요
SELECT
TO_NUMBER(TO_CHAR(DATETIME,'HH24')) AS HOUR
,COUNT(ANIMAL_ID) COUNT
FROM ANIMAL_OUTS
WHERE 1=1
AND TO_CHAR(DATETIME,'HH24') BETWEEN 9 AND 19
GROUP BY TO_CHAR(DATETIME,'HH24')
ORDER BY HOUR;
7. 루시와 엘라 찾기
-- 코드를 입력하세요
SELECT
ANIMAL_ID
,NAME
,SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE 1=1
AND NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID;
8. 3월에 태어난 여성 회원 목록 출력하기
-- 코드를 입력하세요
SELECT
MEMBER_ID
,MEMBER_NAME
,GENDER
,TO_CHAR(DATE_OF_BIRTH,'YYYY-MM-DD') AS DATE_OF_BIRTH
FROM MEMBER_PROFILE
WHERE 1=1
AND TO_CHAR(DATE_OF_BIRTH,'MM') = '03'
AND GENDER = 'W'
AND TLNO IS NOT NULL
ORDER BY MEMBER_ID ASC;
9. 오랜 기간 보호한 동물(1)
-- 코드를 입력하세요
SELECT
I.NAME
,I.DATETIME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE 1=1
AND O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME
FETCH FIRST 3 ROWS ONLY;
'알고리즘 문제풀이 > Programmers' 카테고리의 다른 글
코딩테스트 연습 - 7일차 (0) | 2023.11.13 |
---|---|
코딩테스트 연습 - 6일차 (0) | 2023.11.11 |
코딩테스트 연습 - 4일차 (1) | 2023.11.10 |
코딩테스트 연습 - 3일차 (1) | 2023.11.08 |
코딩테스트 연습 - 2일차 (0) | 2023.11.07 |