공백으로 구분 된 경우

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        // 첫 줄에서 숫자 N 입력받기
        int n = Integer.parseInt(br.readLine());
        Deque<Deque<Integer>> deque = new LinkedList<>();
        
        // N개의 줄에서 각각 공백으로 구분된 여러 개의 숫자 입력받기
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            Deque<Integer> tempDeque = new LinkedList<>();
            while (st.hasMoreTokens()) {
                tempDeque.add(Integer.parseInt(st.nextToken()));
            }
            deque.add(tempDeque);
        }
        
        // Deque 출력하기
        for (Deque<Integer> innerDeque : deque) {
            for (int num : innerDeque) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
    }
}

 

쉼표로 구분된 경우

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        // 첫 줄에서 숫자 N 입력받기
        int n = Integer.parseInt(br.readLine());
        Deque<Deque<Integer>> deque = new LinkedList<>();
        
        // N개의 줄에서 각각 쉼표로 구분된 여러 개의 숫자 입력받기
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), ",");
            Deque<Integer> tempDeque = new LinkedList<>();
            while (st.hasMoreTokens()) {
                tempDeque.add(Integer.parseInt(st.nextToken()));
            }
            deque.add(tempDeque);
        }
        
        // Deque 출력하기
        for (Deque<Integer> innerDeque : deque) {
            for (int num : innerDeque) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
    }
}

자바 커스텀 정렬

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        ArrayList<int[]> list = new ArrayList<>();
        
        // 데이터 추가
        list.add(new int[]{1, 3});
        list.add(new int[]{2, 2});
        list.add(new int[]{1, 1});
        list.add(new int[]{2, 1});
        list.add(new int[]{1, 2});
        
        // 정렬
        Collections.sort(list, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if (o1[0] != o2[0]) {
                    return Integer.compare(o1[0], o2[0]);
                } else {
                    return Integer.compare(o1[1], o2[1]);
                }
            }
        });
        
        // 정렬된 결과 출력
        for (int[] pair : list) {
            System.out.println("[" + pair[0] + ", " + pair[1] + "]");
        }
    }
}

'알고리즘' 카테고리의 다른 글

파이썬 백준 14584  (0) 2024.01.18
DATE_FORMAT(DATE_OF_BIRTH,'%Y-%m-%d') AS DATE_OF_BIRTH

데이트 포맷을 바꿔주는 함수

 

WHERE ADDRESS LIKE '강원도%'

글자 비슷한거를 추출하는 함수

 

 

ROUND(AVG(DAILY_FEE), 0) AS AVERAGE_FEE

AVG(칼럼명) : 평균을 추출하는 함수

ROUND(값, 자리수) : 값을 자리수에 따라 반올림 한다!

0이면 소수점 첫번째 자리 (정수만 출력)

1이면 소수점 두번째 자리 (소수점 첫째자리 까지 출력)

-1이면 일의 자리에서 반올림

 

LIMIT 1

몇번째 튜플 까지 출력할지 설정하는 함수

 

MAX(FAVORITES)

해당 칼럼중에서 가장 많은 값을 출력한다.

SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE

이렇게 쓴다면

FOOD_TYPE들을 그룹핑 한다음, FOOD_TYPE에서 가장 큰 값을 리턴한다.

 

IF(DATEDIFF(END_DATE, START_DATE) >= 30, '장기 대여', '단기 대여')

DATEDIFF 함수 : 날짜간의 차이를 일 수로 반환 해준다.

 

SELECT  CONCAT('/home/grep/src/', BOARD_ID, '/', FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH

CONCAT : 문자열을 합쳐준다

 

        WHEN INSTR(TLNO, '-') > 0 THEN TLNO
        WHEN LENGTH(TLNO) = 10 THEN CONCAT(SUBSTRING(TLNO, 1, 3), '-', SUBSTRING(TLNO, 4, 3), '-', SUBSTRING(TLNO, 7, 4))
        WHEN LENGTH(TLNO) = 11 AND SUBSTRING(TLNO, 1, 3) = '010' THEN CONCAT(SUBSTRING(TLNO, 1, 3), '-', SUBSTRING(TLNO, 4, 4), '-', SUBSTRING(TLNO, 8, 4))
        ELSE TLNO

 

INSTR : 문자열 안에 문자가 포함되어있는지 확인해준다

LENGTH : 문자열 길이

SUBSTRIG : 어디서 부터 어디까지 잘라야 되는지 알려줌

'알고리즘 > SQL' 카테고리의 다른 글

SQL IF문, CASE WHEN 사용법  (0) 2024.02.20
서브쿼리 사용법  (0) 2024.02.20
NULL 값을 바꾸는 함수 COALESCE  (0) 2024.02.06
if('2022-10-16' between start_date and end_date, '대여중','대여 가능')

참일경우 앞의 값

거짓일 경우 뒤의 값이 할당 된다.

    CASE 
        WHEN DATEDIFF(END_DATE, START_DATE) >= 30 THEN '장기 대여' 
        ELSE '단기 대여'

WHEN 뒤에는 조건문 THEN 뒤에는 결과

'알고리즘 > SQL' 카테고리의 다른 글

자주 쓰는 sql 문법 모음  (0) 2024.03.02
서브쿼리 사용법  (0) 2024.02.20
NULL 값을 바꾸는 함수 COALESCE  (0) 2024.02.06

다중 행 서브쿼리

 

서브쿼리의 결과가 2건 이상 반환될 수 있다면 반드시 다중 행 비교 연산자(IN, ALL, ANY, SOME)와 함께 사용해야 합니다.

 

 다중 행 연산자  설명
 IN  서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미한다.
 ALL  서브쿼리의 결과에 존재하는 모든 값을 만족하는 조건을 의미한다.
 ANY  서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미한다.
 EXISTS  서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건을 의미한다.

 

SELECT ID, ReserveDate, RoomNum

FROM Reservation

WHERE Name IN (SELECT Name

                  FROM Customer

                  WHERE Address = '서울')

'알고리즘 > SQL' 카테고리의 다른 글

자주 쓰는 sql 문법 모음  (0) 2024.03.02
SQL IF문, CASE WHEN 사용법  (0) 2024.02.20
NULL 값을 바꾸는 함수 COALESCE  (0) 2024.02.06
COALESCE(칼럼명, '바꾸고 싶은 값') AS 내가_원하는_칼럼명

 

'알고리즘 > SQL' 카테고리의 다른 글

자주 쓰는 sql 문법 모음  (0) 2024.03.02
SQL IF문, CASE WHEN 사용법  (0) 2024.02.20
서브쿼리 사용법  (0) 2024.02.20
import sys
from collections import deque


def findanswer(secret, word_list):
    alpha_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
                  'u', 'v', 'w', 'x', 'y', 'z']
    password = deque(alpha_list)
    for i in range(26):
        temp_answer = ""
        for char in secret:
            diff = ord(char) - ord('a')
            changed_char = password[diff]
            temp_answer += changed_char
        for word in word_list:
            if word in temp_answer:
                return temp_answer
        first_char = password.popleft()
        password.append(first_char)


secret = list(input())
count = int(input())
word_list = [sys.stdin.readline().strip() for i in range(count)]

print(findanswer(secret, word_list))

 

알파벳 리스트를 생성한 뒤에

암호문의 알파벳 순서를 구한다.

 

그 뒤에 알파벳리스트를 해독문으로 바꾸기 위해서

deque을 이용해서 맨앞에 있는 알파벳을 떼서, 뒤에 넣는다.

 

현실적으로 코딩테스트에 들어갔을 때 생각할 수 있을만한 정도의 알고리즘으로 사용

 

import sys
from collections import deque

secret = list(input())
count = int(input())
word_list = [sys.stdin.readline().strip() for i in range(count)]
alpha_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
              'v', 'w', 'x', 'y', 'z']
# aList = list(string.ascii_lowercase) 이렇게 표현가능
password = deque(alpha_list)
for i in range(26):
    temp_answer = ""
    for char in secret:
        diff = ord(char) - ord('a')
        changed_char = password[diff]
        temp_answer += changed_char
    for word in word_list:
        if word in temp_answer:
            print(temp_answer)
    first_char = password.popleft()
    password.append(first_char)

원래는 이렇게 짰는데, 히든케이스를 통과를 못한다...

예상하는 바로는 테스트케이스에 답이 2개 이상 있는걸로 추정되는데

확실하지는 않음..

 

요악

ord() -> 문자를 숫자로 변환한다.

chr() -> 숫자를 문자로 변환한다.

import string
aList = list(string.ascii_lowercase)

소문자 알파벳 리스트 생성하는법

'알고리즘' 카테고리의 다른 글

자바 코딩테스트  (0) 2024.05.24

+ Recent posts