본문 바로가기
728x90

분류 전체보기259

[백준] 자바 문제 풀이 2042 : 골드1 BOJ 2042 : 구간 합 구하기 풀이 코드 import java.io.*; import java.util.*; public class Main { static class SegmentTree { private long[] tree; SegmentTree(int n){ double height = Math.ceil(Math.log(n)/Math.log(2))+1; long size = Math.round(Math.pow(2, height)); tree = new long[Math.toIntExact(size)]; } long init(long[] arr, int node, int start, int end) { if(start == end) return tree[node] = arr[start]; re.. 2023. 10. 4.
[백준] 자바 문제 풀이 1781 : 골드2 BOJ 1781 : 컵라면 풀이 코드 import java.io.*; import java.util.*; public class Main { static class Problem { int ramen; int time; Problem(int time, int ramen) { this.ramen = ramen; this.time = time; } } public static void main(String[] args) throws Exception { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWri.. 2023. 10. 4.
[자바/Java] 상속(inheritance) 상속이란? 상속은 자바의 핵심 개념 중 하나이다. 상속은 이름 그대로 부모가 자식에게 재산을 물려주는 것과 유사한 의미이다. 현실 세계에서 상속과의 차이점은 자바에서의 상속은 자식 클래스가 상속 받고 싶은 부모의 클래스를 선택해서 물려받는 것이다. 이 때에 상속 받는 클래스를 자식 클래스, 하위 클래스 또는 서브 클래스라고 부르고 상속을 해주는 클래스는 부모 클래스, 상위 클래스 또는 슈퍼 클래스라고 한다. 상속을 하는 이유는 유지 보수가 쉽고 중복이 적고 통일성이 생기기 때문이다. 예를 들어, 핸드폰에는 아이폰, 갤럭시 등 수많은 종류의 휴대폰이 있지만 모든 핸드폰이 공통적으로 가지고 있는 기능들이 존재한다. 이 때, 이 공통된 기능(메소드)들을 핸드폰(클래스)을 만들때마다 구현을 하는 건 너무 비효율.. 2023. 9. 29.
[자바/Java] 클래스 클래스의 정의 자바 프로그래밍은 OOP(객체 지향 프로그래밍)이라고도 한다. 객체 지향 프로그래밍이란, 현실 세계에서도 특정 제품을 만들 때 여러 가지 부품들을 각각 만들어 하나로 조립하듯이 프로그밍적으로도 여러가지 객체(Object)를 각각 만들어서 하나로 조립하는 프로그래밍 기법이다. 이 때에 객체는 클래스를 통해 생성할 수 있게 된다.각 부품들의 기능과 또 그 부품이 가지는 또 다른 부품들로 이루어져 있듯이 객체를 생성하는 클래스도 다음과 같은 구조를 가지고 있다. 필드(Field) : 객체의 데이터가 저장되는 곳 생성자(Constructor) : new 연산자로 호출되는 메소드로 객체 생성 시 필드의 초기화를 담당 메소드(Method) : 객체의 동작에 해당하며 클래승의 다양한 동작을 구성 간단한.. 2023. 9. 29.
[자바/Java] 메소드5 - 재귀 호출 재귀란? 재귀 호출, 재귀 함수에서 재귀(recursive)란 자기 자신을 또 다시 호출한다는 뜻이다. 즉 재귀 함수(메소드)는 함수(메소드) 내에서 메소드가 자기 자신을 또 다시 호출하는 것이다. 이렇게 재귀를 통해 자기 자신을 호출하는 이유는 복잡한 문제를 간단하고 논리적으로 기술이 가능하기 때문이다. 그렇기 때문에 코딩 테스트 문제를 풀다 보면 많이 사용되는 개념 중 하나이다. 여러 복잡한 문제들을 간단하고 논리적이게 표현이 가능하다고는 하지만 메모리 부담이라는 명확한 단점 또한 존재한다. 이러한 단점에 대한 이유는 재귀가 어떤게 작동하는 지를 통해 알 수 있다. 재귀의 작동 방식 메소드를 호출할 경우, 호출한 시점에 대한 상태를 메모리에 저장해 두어야 메소드 종료시 현재 상태로 돌아와 남은 작업을.. 2023. 9. 29.
[자바/Java] 메소드4 - call by reference, call by value 프로그래밍 언어를 공부할 때 초반에 속을 썩이는 개념 중 하나가 바로 메소드(함수)의 매개변수가 call by value인지 call by reference인지에 대한 것이다. 특히 C를 공부할 때 많은 개발 입문자가 좌절을 맛 보는 pointer가 이러한 개념과 밀접하게 연관되어 있기 때문에 pointer에 대해서 이해를 못하면 이 개념 또한 이해하기가 어렵다. 하지만 자바에서는 포인터라는 키워드를 사용하지 않으므로 변수 타입에 따라 call by reference, call by value인지 정해지기 때문에 pointer와 같이 사용법이라는 것이 없기 때문에 해당 개념에 대해서만 정확하게 숙지하고 있으면 프로그래밍을 하는데 어려움은 없다. 변수 타입 - 참조냐 아니냐 변수의 타입은 세세하게는 int.. 2023. 9. 28.
[자바/Java] 메소드3 - Math 클래스 Math 클래스 자바에서는 기본적으로 제공하는 여러 객체들이 있다. 여기서 주목할 점은 클래스가 아닌 이미 클래스로 생성된 객체를 제공하기 때문에 별다른 선언없이 바로 사용할 수 있다는 점이다. 이렇게 기본적으로 제공되는 객체들은 여러 편리한 기능을 제공하고 있기 때문에 잘 활용할 경우, 여러 복잡한 작업들을 간단하게 작성할 수 있기 때문에 코드도 간결해진다. 그 중에 올림, 내림, 반올림 등 여러 수와 관련된 연산을 수행하는 메소드를 모아놓은 Math 클래스는 유용하게 사용되는 자바의 클래스 중 하나이다. 이번 글에서는 Math 클래스에서 자주 사용하는 메소드에 대해서 알아보겠다. 난수 발생시키기 난수란, 쉽게 말하여 무작위로 발생시킨 수이다. 자바의 Math 클래스에는 난수를 발생시키기 위한 메소드를.. 2023. 9. 28.
[자바/Java] 메소드2 - 리턴, 오버로딩 Return 의미 Return은 Re + turn의 의미 그대로, 다시 돌려주다를 뜻한다. 그렇기 때문에 프로그래밍 언어에서 리턴은 실행의 결과로서 다시 돌려주는 값을 뜻한다. 메소드에서 리턴문을 만날경우, 다음과 같은 과정을 거친다. 메소드를 호출한 곳으로 값을 리턴 이 때에 메소드가 정의시 명시한 리턴타입의 값을 리턴(무조건) 메소드 종료 반환값을 저장하는 변수가 있을 경우 저장 오버로딩(Overloading) 자바에서 메소드에 대해서 다룰 때 나오는 중요한 개념 중 하나이다. Overloading이란, 메소드를 중복으로 정의할 수 있는 개념이다. 메소드의 중복 정의, 오버로딩을 하기 위해서는 다음과 같은 조건을 만족해야 한다. 매개변수의 개수가 다르거나 매개변수의 자료형이 다르거나 매개변수의 순서가.. 2023. 9. 28.
[자바/Java] 메소드1 - 정의 Method란 메소드(Method)란 흔히 프로그래밍에서 함수라고하는 개념과 똑같다. 자바에서는 함수라고 하지 않고 메소드라고 부른다. 프로그래밍을 하다보면, 반복적으로 함수(Function)를 사용해야 하는 경우가 많다. 해당 함수가 필요할 때마다 class 내에서 선언해주고 사용하기에는 너무 비효율적이다. 그러므로 메소드를 통해 반복되는 코드, 내용, 재사용해야 할 코드들을 한 뭉치로 묶어서 따로 메소드로 만들은 다음(정의) 이를 필요할 때마다 사용(호출)한다. Method 정의 메소드의 정의는 클래스 내에서 main 메소드 바깥에서 정의하여야 한다.메소드의 정의 구문은 다음과 같이 구성되어 있다. 수식어 리턴타입 메소드명 (매개변수, ...) { 실행문 } /* modifier return_type.. 2023. 9. 28.
[자바/Java] var 변수 선언 var로 변수 선언 var는 자바 10에서 부터 도입된 keyword로 변수를 선언할 때 사용하는 키워드이다. 일반적으로(자바 9 이하) 자바에서 변수를 선언할 때 변수의 type을 지정하여 선언한다. 예를 들어 정수형 변수 num을 선언하기 위해서는 다음과 같이 선언하여야 한다. int num; //정수형 타입의 변수 num 선언 자바 10부터는 위와 같이 그대로 변수를 선언할 수 있지만 다음과 같이 var를 이용해서도 선언할 수 있다. // 타입이 지정되지 않은 num 선언 : 컴파일시 num 변수를 int형 타입으로 추론하여 지정 var num = 10; var로 선언할 시에 변수의 타입을 생략할 수 있고 이 때 생략된 변수의 타입은 컴파일러가 컴파일시 타입을 추론하여 변수에 타입을 지정해준다. v.. 2023. 9. 28.
[알고리즘] 탐욕(그리디) 알고리즘 탐욕 알고리즘(greedy algorithm) 그리디 알고리즘은 동적 프로그래밍 사용 시 지나치게 많은 일을 하는 것을 보완하기 위해 고안된 알고리즘입니다. 동적 프로그래밍을 대체하는 것은 아니고 같이 쓰이며 서로 보완하는 개념입니다. 그리디 알고리즘은 탐욕 알고리즘 또는 욕심쟁이 알고리즘이라고도 불립니다. 미래를 생각하지 않고 각 단계에서 가장 최선의 선택을 하는 기법입니다. 이렇게 각 단계에서 최선의 선택을 한 것이 전체적으로도 최선이길 바라는 알고리즘입니다. 물론 모든 경우에서 그리디 알고리즘이 통하지는 않습니다.(그리디 알고리즘은 단순히 지금 최선의 선택이 전체적으로도 최선의 선택이길 바랄 뿐이기 때문입니다) 쉬운 예를 들자면 지금 선택하면 1개의 마시멜로를 받고, 1분 기다렸다 선택하면 2개의 .. 2023. 9. 26.
[백준] 자바 문제 풀이 1253 : 골드4 BOJ 1253 : 좋다 풀이 코드 import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine()); int[] arr = new int[n]; StringTokenizer str = new StringTokenizer(br.rea.. 2023. 9. 26.
728x90
반응형