문제 핵심 포인트 1. 문제를 이해하는 것 부터 힘들다. 2. 숨은 조건을 찾아내기 일단 아래에 중요한 부분을 표시해봤다. 여기서 O(n)정의를 만족하는지를 물었으니 O(g(n))의 g(n)은 n이 된다. + 문제조건 1. a1,a0 = 양수,음수 가능 2. c,n0 = 양수 이 정보들을 바탕으로 부등식을 써보자 a1*n0 + a0 ≤ c*n0 이 부등식을 조건문으로 사용해서 문제를 제출해보자. 정답인 것 같다. import java.io.*; public class Main { public static void main(String[] length) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(Syst..
문제 핵심 포인트 1. BigO 표기법으로 봤을때 몇차수인가 2. 표시된 코드가 얼마나 반복되는가 3. 자료형 범위가 맞나 MenOfPassion(A[], n) { sum
문제 핵심 포인트 굉장히 큰 크기(long보다 큰)의 int를 어떻게 계산할 것인가? 방법1. BigInteger 클래스 사용 import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); BigInteger big1 = scan.nextBigInteger(); BigInteger big2 = scan.nextBigInteger(); System.out.println(big1.add(big2)); } } 방법2. 배열을 이용해서 계산 (아래 코드에서 BufferWriter를 사용할 때 주의할 ..
API개념을 공부하기 위해 자료를 찾아봤는데, 많은 자료에서 API는 메뉴판이라는 비유로 설명을 하고 있었다. 메뉴판이라는 비유가 API라는 개념에 처음 접근하기에 친숙하고 가벼우면서도, 뭔가 개인적으로는 머리에 막 와닿지는 않았다. 이참에 많이 알려진 설명들에 내가 공부하면서 이해한 내용을 추가해서 정리해보려 한다. API란? 사전적인 정의 서로 다른 프로그램들 사이에서 데이터를 주고받기 위한 방법 , 애필리케이션에서 데이터를 읽거나 쓰기 위해 사용하는 인터페이스 설명 식당가서 요리사한테 , “ 야채 썰고 , 기름에 넣어서 야채기름 낸 다음 , 고기 썰어서 같이 볶고 , 마지막으로 밥 넣고 볶아서 가져와주세요” 라고 하진 않는다. 그냥 [메뉴판]을 보고 종업원에게 “[볶음밥] 주세요” 하지 여기서 [메..
Prefix sum ( 누적합 )장점 : 한번 누적합 배열을 만들어 놓으면 구간합을 빠르게 구할 수 있다.구간합 : 배열에서 특정 구간의 합 ( 예시 : arr[1234] ~ arr[1000000]까지의 모든 원소들의 합 )속도차이 ( 시간복잡도 )반복문을 사용해서 구간합을 연속적으로 구하는 일반적인 경우 시간복잡도는O(n)(반복문) x O(n)(구간합계산) = O(n²)이다. 하지만 누적합을 사용한다면O(n)(누적합 배열 구현) + O(n)(반복문) x O(1)(구간합 계산) = O(n)이 된다. 즉 훨씬 빠르다는 소리다.구현예시 누적합 구현시, 현재 위치 직전의 인덱스를 사용하기 때문에 기존 배열의 0번째 인덱스는 비워두는 편이 구현하기 수월하다.아래 코드와 그림을 보면 더 쉽게 이해할 수 있다.//..
아무 생각없이 int를 사용했다가 런타임 에러가 떠서 당황했다. 문제를 잘 보면 [입력 : 첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 10¹²)이 공백을 사이에 두고 주어진다.] 에서 범위가 1 ~ 10의 12승이다. 하지만 int의 4바이트로 양의 범위는 최대 2,147,483,647(2의 31승 ) < 10의 10승 이기 때문에 런타임 에러가 뜬다. 따라서 8바이트 자료형(double,long long등)을 써줘야 런타임 에러가 발생하지 않는다. import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); long a,b,c; a ..
일단 추상클래스와 인터페이스는 추상메서드 없이는 설명이 불가능하기 때문에 추상메서드 먼저 살펴보자. 추상메서드란? 메서드는 선언부와 구현부로 나뉘는데 , 메서드들 중에서 선언부까지만 작성하고 구현부는 작성하지 않은 메소드를 추상메서드라고 한다. abstract를 메서드 앞에 붙여서 (정확히는 접근 제어자 앞이나 뒤에 붙여서) 추상메서드임을 명시한다. 추상메서드를 가진 클래스는 반드시 추상클래스여야 한다. 추상메서드는 구현부 즉 실행 코드가 없어서 추상메서드를 가진 클래스(추상클래스)는 인스턴스를 만들 수 없다. 추상클래스란? 구조적으로는 일반 클래스와 큰 차이는 없다. 똑같이 일반 필드 , 일반 메서드를 가질 수 있다. 차이점은 추상메서드를 가지고 있다는 것이다. abstract를 class 앞에 붙여서..
함수형 프로그래밍(Functional Programming)이란? 자료를 찾아보면서 이해하기 가장 좋았던 예시는 파이프라인이었다. 아래는 설명 전 이해를 돕기 위해한 자료로 , 내가 생각하는 함수형 프로그래밍의 기본 틀을 그림으로 표현한 것과 이미지이다. 개념 설명 파이프라인( 코딩에서는 함수 )은 input을 넣으면 input에 고정된 output을 내보낸다. 그림에서 보이다시피 외부에서는 파이프라인 안에 접근할 수도 볼 수도 없다. 마찬가지로 파이프라인 안에서도 외부에 접근하거나 볼 수 없다. 함수형 프로그래밍은 이런 파이프라인들( 함수들 )을 묶고 연결해서 프로그램을 만들어가는 프로그래밍 패러다임을 말한다. 함수형 프로그래밍의 특징 순수함수 = 함수에서 외부의 상태값을 참조하거나 외부의 상태를 변경..