각도기

class Solution {
    public int solution(int angle) {
        int answer = 0;
        
        if (0 < angle && angle < 90){
            answer = 1;
        } else if(angle == 90) {
            answer = 2;
        } else if(90 < angle && angle < 180) {
            answer = 3;
        } else if(angle == 180) {
            answer = 4;
        }
        
        return answer;
    }
}

 

짝수의 합

class Solution {
    public int solution(int n) {
        int answer = 0;
        for (int i = 1; i <= n; i++){
            if (i % 2 == 0){
                answer += i;
            }
        }
        return answer;
    }
}

 

배열의 평균값

  • 배열의 길이를 조회할 때는 배열이름.length
class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        for (int i = 0; i < numbers.length; i++){
            answer += numbers[i];
        }
        answer /= numbers.length;
        return answer;
    }
}

 

짝수와 홀수

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        for (int i = 0; i < numbers.length; i++){
            answer += numbers[i];
        }
        answer /= numbers.length;
        return answer;
    }
}

 

평균 구하기

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        for (int i = 0; i < numbers.length; i++){
            answer += numbers[i];
        }
        answer /= numbers.length;
        return answer;
    }
}

'Algorithm' 카테고리의 다른 글

자바 알고리즘 연습(3)  (2) 2025.01.03
7568 덩치 / 브루트포스  (2) 2025.01.03
2231 분해합 / 브루트포스  (2) 2025.01.02
2798번 블랙잭 / 브루트포스  (2) 2025.01.01
13305번 주유소 / 그리디  (0) 2024.12.31

 

 

1. 각각의 자릿수를 문자열로 바뀌서 더하기

n = int(input())
ans = 0
for i in range(n):
    num = i #자기 자신 더하기
    j = str(i)
    for k in j: #각 자리수 더하기
        num += int(k)

    if num == n: #조건에 해당된다면 값 리턴
        ans = i
        break

print(ans)

 

2. 각각의 자릿수를 나머지 연산을 이용하여 더하기

n = int(input())
ans = 0
for i in range(n):
    num = i #자기 자신 더하기
    current_num = i
    while current_num > 0:
        num += current_num % 10 #자릿수마다 더하기
        current_num //= 10 #더한 자릿수는 제거

    if num == n:
        ans = i
        break

print(ans)

'Algorithm' 카테고리의 다른 글

7568 덩치 / 브루트포스  (2) 2025.01.03
자바 알고리즘 연습(2)  (2) 2025.01.02
2798번 블랙잭 / 브루트포스  (2) 2025.01.01
13305번 주유소 / 그리디  (0) 2024.12.31
자바 알고리즘 연습(1)  (4) 2024.12.24

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String title = scanner.nextLine();
        float star = scanner.nextFloat();
        scanner.nextLine(); //버퍼에 남아있는 \n을 가져와 비움
        float percentage_star = (star / 5.0f) * 100;
        String[] recipe = new String[10];

        for (int i = 0; i < 10; i++){
            recipe[i] = scanner.nextLine();
        }

        System.out.println(recipe[0]);

        System.out.println("[ " + title + " ]");
        System.out.println("별점 : " + (int)star + " (" + percentage_star + "%" + ")");

        int index = 1;
        for (int i = 0; i < 10; i++){
            System.out.println( index++ + ". " + recipe[i]);
        }

    }

}

 

배열

향후 미리 저장할 값들을 선언하는 경우 : 타입[] 변수 = new 타입[길이];

 

문제점 및 해결

scanner.nextFloat(); 이후, 배열의 첫 번째 값이 입력되지 않음

  • nextInt() 같은 메서드는 버퍼에 남아있는 연속된 숫자만 리턴하기 때문에, enter 값인 \n은 버퍼에 남겨둔다
  • 그렇기 때문에 버퍼를 비워주는 작업을 통해서 해결함
float star = scanner.nextFloat();
scanner.nextLine(); //버퍼에 남아있는 \n을 가져와 비움

 

백분율을 구하는 부분에서 형변환 주의 

  • (star / 5.0f) 부분에서 나누는 수를 명시적으로 실수라고 지정해야 정확한 결과값이 나옴

소수점을 표현하는 방식

  • 고정소수점 00.00 → 소수점의 길이나 바이트 수를 미리 제한해 놓은 것
  • 부동소수점 → 부호, 지수, 가수부의 영역만 정해 놓고 곱한 값을 저장해서 표현하는 방식 → 엄청 많은 수 표현 가능
    • 그렇기 때문에 float(4byte)여도 long(8byte)보다 더 큰 수를 표현할 수 있음

char과 String의 차이

  • char(byte)('')
    • 문자 뒤에 널문자(\0)가 없음, 1byte만 사용하기 때문
    • 기본형
  • String("")
    • 문자 뒤에 널문자 존재, 어디가 끝인지 알아야 되기 때문
    • 참조형

문자자료형 : 메모리는 이진수만 기록하므로 문자에 해당하는 유니코드값으로 매칭시켜 저장

 

기본형과 참조형 

  • 기본형 변수 : 원본값이 Stack 영역(정적영역 = 크기가 얼마인지 지정되어 있어야 함)으로 할당된 메모리 영역에 저장
  • 참조형 변수 : 원본값이 heap 영역에(동적영역 = 크기가 가변적임) 저장, heap영역의 원본 주소값을 저장함

 

형변환

  • 작은 타입에서 -> 큰 타입으로 형변환 : 자동으로 됨(up캐스팅)
  • 큰 타입에서 -> 작은 타입 형변환 : 값의 손실이 생김, 개발자가 직접 명시함(down캐스팅) 
public class Main {

    public static void main(String[] args) {
        // 변수 타입별 크기 순서
        // byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)

        // (1) byte -> int
        byte byteNumber = 10;
        int intNumber = byteNumber;
        System.out.println(intNumber);

        // (2) char(1byte) -> int(4) 형변환
        char alphabet = 'A';
        intNumber = alphabet; // char -> int로 자동 형변환
        System.out.println(intNumber);

        // (3) int -> double 형 변환
        intNumber = 200;
        double doubleNumber = intNumber;
        System.out.println(doubleNumber);

        // (4) double -> int 형 변환
        // 개발자가 명시적으로 형변환 = downcasting
        double d = 3.5;
        int a  = (int) d;
        System.out.println("강제 형변환 : " + a);

        // 큰 크기 타입으로 자동 형 변환
        int intNum = 10;
        double doubleNum = 5.5;
        double result = intNum + doubleNumber;
        System.out.println(result);

    }

}
  • 작은 크기 타입이 큰 크기의 타입이랑 계산될 때 자동으로 큰 크기의 타입으로 형 변환됨
public class Main {

    public static void main(String[] args) {
        int intNum = 10;

        // 1) 정수로 나누기
        int iResult = intNum / 4;
        // 2) 실수로 나누기
        double dResult = intNum / 4.0;

        System.out.println(iResult + " | " + dResult); // 2 | 2.5
    }

}

n, m = map(int, input().split()) #카드의 개수 / 가장 가까워야 하는 수
cards = list(map(int, input().split())) #카드 리스트
result = 0

# 모든 조합의 수를 구함
for i in range(n):
    for j in range(i+1, n):
        for k in range(j+1, n):
            card_sum = cards[i] + cards[j] + cards[k]
            
            #조건에 해당되는 새로운 수가 나올 때마다 갱신
            if m >= card_sum and card_sum > result:
                result = card_sum

print(result)

 

  • 구할 수 있는 모든 조합의 수의 카드를 구함 -> for문을 통해서 구함
  • 모든 합을 다 저장해놨다가 최대를 찾아야 하나 생각함,, -> 조건에 맞는 변수를 하나 두고 새로운 값이 나올 때마다 갱신

'Algorithm' 카테고리의 다른 글

자바 알고리즘 연습(2)  (2) 2025.01.02
2231 분해합 / 브루트포스  (2) 2025.01.02
13305번 주유소 / 그리디  (0) 2024.12.31
자바 알고리즘 연습(1)  (4) 2024.12.24
10799번 쇠막대기 / 스택  (1) 2024.12.17

JVM

  • 어떤 침대에 깔아도 똑같이 편안하게 해주는 침대 메트리스의 토퍼같은 역할
  • 어떤 운영체제에 상관없이 (리눅스, 윈도우, 맥 .. ) 자바를 실행시킬 수 있게 해주는 자바 가상 머신
  • 가상머신 = 가상의 기기를 만들어 주는 것
  • JVM을 통해 자바의 플랫폼 독립성이 보장되는 것!

 

 Compile

1. 정적 컴파일 과정 : JAVA Compiler(javac) 

  • .java파일 코드를 .class(바이트코드)파일로 변환하는 변환기

.java 코드 : 사람이 이해할 수 있는 코드

.class 코드(바이트 코드) : 운영체제가 이해할 수 있는 코드, jvm에서 실행되기 위한 형태로 변환된 코드

 

2.  동적 컴파일 과정 : interpreter & JIT

  • interpreter : 바이트코드를 한 줄씩 읽어서 실행
  • JIT : 자주 실행되는 코드를 기계어로 변환하여 캐싱, 실행 속도를 향상함

 

메모리 : 운영체제로부터 jvm이 할당받은 데이터를 저장하는 영역

클래스 로더 :바이트 코드를 메모리 영역에 운반

가비지 컬랙터 :메모리에서 안 쓰는 데이터를 제거함

런타임 : 프로그램이 실행중인 상태 

 

자바 개발 도구와 자바 실행 환경

  • JDK(Java Development Kit) : 자바 개발 도구, 자바를 이용해 프로그램을 개발하는데 필요한 도구, 컴파일, 디버거 ,
    • JAVA Compiler(javac) 가능!
    • 디버깅 가능!
    • JRE 가능!
  • JRE(Java Runtime Environment)(jvm포함) : 자바 실행 환경, 자바 API, 클래스 로더 ,,
    • 자바 실행 환경, jvm이므로 바이트코드(.class)파일만 실행 가능함

→ JDK는 JRE를 포함, JRE는 JVM을 포함

 

 

n = int(input()) #도시의 개수
distence = list(map(int, input().split())) #도시간의 거리
city = list(map(int, input().split())) #각 도시별 주유 비용

cost = 0
min_cost = city[0]

for i in range(n-1): #거리 갯수만큼 반복

    #현재 최소 비용보다 더 작다면 갱신
    if min_cost > city[i]:
        min_cost = city[i]

    cost += min_cost * distence[i]

print(cost)

'Algorithm' 카테고리의 다른 글

2231 분해합 / 브루트포스  (2) 2025.01.02
2798번 블랙잭 / 브루트포스  (2) 2025.01.01
자바 알고리즘 연습(1)  (4) 2024.12.24
10799번 쇠막대기 / 스택  (1) 2024.12.17
1931번 회의실 배정 / 그리디  (0) 2024.12.17

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

SELECT distinct r.CAR_ID
from CAR_RENTAL_COMPANY_CAR r
inner join CAR_RENTAL_COMPANY_RENTAL_HISTORY h
    on r.CAR_ID = h.CAR_ID
where r.CAR_TYPE = '세단'
        and month(h.START_DATE) = 10
order by 1 desc

 

식품분류별 가장 비싼 식품의 정보 조회하기

  • 서브쿼리에 별칭을 무조건 지어줘야 함! -> Every derived table must have its own alias
select a.CATEGORY,
        a.PRICE MAX_PRICE,
        a.PRODUCT_NAME
from
(
SELECT CATEGORY,
        PRODUCT_NAME,
        rank() over(partition by CATEGORY order by PRICE desc) as ranking,
        PRICE
from FOOD_PRODUCT
) a
where a.ranking = 1
    and a.CATEGORY in ('과자', '국', '김치', '식용유')
order by 2 desc

 

5월 식품들의 총매출 조회하기

SELECT p.PRODUCT_ID,
        p.PRODUCT_NAME,
        sum(p.PRICE * o.AMOUNT) TOTAL_SALES
from FOOD_PRODUCT p 
    inner join FOOD_ORDER o on p.PRODUCT_ID = o.PRODUCT_ID
where o.PRODUCE_DATE >= '2022-05-01' and o.PRODUCE_DATE < '2022-06-01'
group by 1, 2
order by 3 desc, 1

 

없어진 기록 찾기

  • left join을 할 때 on을 걸어주는 오른쪽에 있는 테이블에 존재하지 않아도 되는 값임
  • exists : 메인 쿼리에 먼저 접근하여 row를 하나 가져오고 exists의 서브쿼리를 실행시켜 결과가 존재하는지를 판단
    • 서브쿼리의 결과값에서 필터링해줌(in 과 같은 역할)
SELECT o.ANIMAL_ID, o.NAME
FROM ANIMAL_OUTS o
LEFT JOIN ANIMAL_INS i
    ON o.ANIMAL_ID = i.ANIMAL_ID
where i.ANIMAL_ID is null
order by 1
SELECT ao.ANIMAL_ID, ao.NAME
FROM ANIMAL_OUTS ao
WHERE NOT EXISTS (
    SELECT i.ANIMAL_ID
    FROM ANIMAL_INS i
    WHERE i.ANIMAL_ID = ao.ANIMAL_ID
)
order by ao.ANIMAL_ID

 

'SQL' 카테고리의 다른 글

SQL 총연습 (1)  (3) 2024.12.24
SELECT 연습(4)  (2) 2024.12.20
SELECT 연습(3)  (2) 2024.12.19
SELECT 연습(2)  (3) 2024.12.18
SELECT 연습(1)  (3) 2024.12.17

+ Recent posts