JAVA | SCRIPT | SQL | |
8일차 | 2개 | 7개 | 3개 |
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. 문자열 계산하기
- 예시에는 두수를 연산하는 것 밖에 없어서 두 수 이상일 경우를 생각하지 못해 시간이 오래 걸림
my_string은 "3 + 5"처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.
class Solution {
public int solution(String my_string) {
//문자열 공백 기준으로 잘라서 배열로 변환
String[] arr = my_string.split(" ");
int answer = Integer.parseInt(arr[0]);
//index 1부터 배열의 크기만큼 for문 돌기
for(int i=1; i<arr.length; i+=2){
//i가 "+"이면
if("+".equals(arr[i])){
answer += Integer.parseInt(arr[i+1]);
}
//index 1의 값이 -일 경우
else {
answer -= Integer.parseInt(arr[i+1]);
}
}
return answer;
}
}
2. 구슬을 나누는 경우의 수
- 힌트에 나온 공식대로 계산해보았지만 되지 않았음
- 식을 하나씩 계산하여 공통되는 부분을 제거하고 연산을 하니 통과됨
- 수학 지식이 부족해서 풀이가 오래 걸리는 것 같음..
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
class Solution {
public long solution(int balls, int share) {
long answer = 1;
int index = 1;
//분모의 (n-m)!은 분자의 n!에서 (n-m)!만큼 나눠서 없앴기 때문에 share+1부터 balls까지만 for문 돌기
for(int i=share+1; i<=balls; i++){
//분자 n!에서 (n-m)! 만큼 빼고 나머지 값 연산
answer *= i;
//분모에서 (n-m)!을 제거했기 때문에 m!값만 연산
answer /= index;
//m!만큼 나눠주기 위해 ++
index++;
}
return answer;
}
}
SCRIPT
1. 문자 리스트를 문자열로 변환하기
문자들이 담겨있는 배열 arr가 주어집니다. arr의 원소들을 순서대로 이어 붙인 문자열을 return 하는 solution함수를 작성해 주세요.
function solution(arr) {
var answer = '';
answer = arr.join("");
return answer;
}
2. 문자열 돌리기
문자열 str이 주어집니다.
문자열을 시계방향으로 90도 돌려서 아래 입출력 예와 같이 출력하는 코드를 작성해 보세요.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let input = [];
rl.on('line', function (line) {
input = [line];
}).on('close',function(){
str = input[0];
//문자열을 배열로 변환
let arr = str.split("");
//배열의 크기만큼 for문 돌기
for(let i=0; i<arr.length; i++){
//배열의 값 하나씩 출력
console.log(arr[i]);
}
});
3. 수 조작하기 2
정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.
- "w" : 수에 1을 더한다.
- "s" : 수에 1을 뺀다.
- "d" : 수에 10을 더한다.
- "a" : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.
주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.
function solution(numLog) {
var answer = '';
//배열의 크기 -1 만큼 for문 돌기
for(let i=0; i<numLog.length; i++){
//i+1의 값이 i보다 1 클 경우
if(numLog[i+1]-numLog[i] == 1){
//answer += w
answer += "w";
}
//i+1의 값이 i보다 1 작을 경우
else if(numLog[i+1]-numLog[i] == -1){
//answer += s
answer += "s";
}
//i+1의 값이 i보다 10 클 경우
else if(numLog[i+1]-numLog[i] == 10){
//answer += d
answer += "d";
}
//i+1의 값이 i보다 10 작을 경우
else if(numLog[i+1]-numLog[i] == -10){
//answer += a
answer += "a";
}
}
return answer;
}
4. 주사위 게임 2
1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.
- 세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
- 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
- 세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
function solution(a, b, c) {
var answer = 0;
//세 숫자가 모두 다를 경우
if(a != b && b != c && a != c){
answer += a+b+c;
}
//세 숫자 모두 같을 경우
if(a == b || b == c){
//세 숫자 중 두 숫자만 같을 경우
if(a != b || b != c || a != c){
answer += (a+b+c) * ((a ** 2) + (b ** 2) + (c ** 2));
}
else{
answer += (a+b+c) * ((a ** 2) + (b ** 2) + (c ** 2)) * ((a ** 3) + (b ** 3) + (c ** 3));
}
}
return answer;
}
5. 9로 나눈 나머지
음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.
이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.
function solution(number) {
var answer = 0;
let arr = number.split("");
for(let i=0; i<arr.length; i++){
answer += parseInt(arr[i]);
}
console.log(answer);
answer %= 9;
return answer;
}
6. 세로 읽기
문자열 my_string과 두 정수 m, c가 주어집니다. my_string을 한 줄에 m 글자씩 가로로 적었을 때 왼쪽부터 세로로 c번째 열에 적힌 글자들을 문자열로 return 하는 solution 함수를 작성해 주세요.
function solution(my_string, m, c) {
var answer = '';
//문자열을 배열로 변환
let arr = my_string.split("");
//배열의 크기만큼 for문 돌기(c부터 m만큼 커지기)
for(let i=c-1; i<arr.length; i+=m){
//배열의 값을 answer에 추가
answer += arr[i];
//for문 끝
}
return answer;
}
7. 수열과 구간 쿼리 1
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
function solution(arr, queries) {
var answer = [];
//queries의 크기 만큼 for문 돌기
for(let i=0; i<queries.length; i++){
//queries[i][0]부터 queries[i][1]까지 for문 돌기
for(let j=queries[i][0]; j<=queries[i][1]; j++){
//arr[j]++
arr[j]++;
//for문 끝
}
//for문 끝
}
answer = [...arr];
return answer;
}
SQL
1. 헤비 유저가 소유한 장소
SELECT
A.ID
,A.NAME
,A.HOST_ID
FROM PLACES A
LEFT JOIN PLACES B ON A.HOST_ID = B.HOST_ID
GROUP BY A.ID
HAVING COUNT(A.ID) >= 2
ORDER BY ID;
2. 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기
SELECT
CONCAT('/home/grep/src/',F.BOARD_ID,'/',F.FILE_ID,F.FILE_NAME,F.FILE_EXT) AS FILE_PATH
FROM USED_GOODS_BOARD B
LEFT JOIN USED_GOODS_FILE F ON B.BOARD_ID = F.BOARD_ID
WHERE 1=1
AND B.VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD)
ORDER BY F.FILE_ID DESC;
3. 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기(문제 잘못 이해해서 오래걸림ㅠㅠ)
- 해당 기간 안에 대여 횟수가 5회 이상인 월별 대여 횟수!
WITH SUB AS(
SELECT
CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 1=1
AND TO_CHAR(START_DATE,'YYYY-MM') BETWEEN '2022-08' AND '2022-10'
GROUP BY CAR_ID
HAVING COUNT(CAR_ID) >= 5
)
SELECT
EXTRACT(MONTH FROM START_DATE) AS MONTH
,CAR_ID
,COUNT(CAR_ID) AS RECORDS
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 1=1
AND CAR_ID IN (SELECT CAR_ID FROM SUB)
AND TO_CHAR(START_DATE,'YYYY-MM') BETWEEN '2022-08' AND '2022-10'
GROUP BY EXTRACT(MONTH FROM START_DATE), CAR_ID
HAVING COUNT(CAR_ID) >= 0
ORDER BY MONTH ASC, CAR_ID DESC;
'알고리즘 문제풀이 > Programmers' 카테고리의 다른 글
코딩테스트 연습 - 10일차 (1) | 2023.11.16 |
---|---|
코딩테스트 연습 - 9일차 (1) | 2023.11.15 |
코딩테스트 연습 - 7일차 (0) | 2023.11.13 |
코딩테스트 연습 - 6일차 (0) | 2023.11.11 |
코딩테스트 연습 - 5일차 (0) | 2023.11.10 |