목록프로그래밍 (14)
코학다식
문제 링크 Solution 처음에는 양수 배열과 음수 배열로 나누어서 이분 탐색을 실행하는 걸 고민해 봤는데, 번거로운 것 같고 다른 방법이 있을 것 같아 다른 방법을 찾다 절댓값으로 정렬해서 이웃한 두 수를 더하는 방법을 사용했다. 이 방법을 사용하면 모두 양수인 경우, 모두 음수인 경우도 쉽게 해결할 수 있다. 대충 봤을 때 값이 꽤 커 보이기에 모든 변수를 long long으로 선언해 줬다. +) C++의 sort 함수는 정말 자주 유용하게 쓰이는 것 같다. code #include #include #include #include using namespace std; vector ans; bool cmp (const long long a, const long long b) { if (abs(a) =..
Java 시작하기(5) Object Oriented Programming(2): classes, variables, and methods Final 인스턴스 변수 인스턴스 변수가 final 키워드를 사용해서 선언되었다면, 그 변수의 값은 생성자 안에서만 결정될 수 있다. class Employee { private final String name; public Employee() { this.name = "Kim"; } public void setName(String name){ this.name = name; // Error: cannot assign a value to a final instance variable } } Static 변수 클래스를 정의할 때, 변수는 static 변수로 정의될 수 있..
Java 시작하기(4) Object Oriented Programming(1): classes, variables, and methods 자바, 객체 지향(Object-oriented) 언어 자바에서 대부분의 변수와 리터럴은 객체(Object)이다. 객체는 클래스의 인스턴스(instance)이다. 클래스는 객체의 타입이라고 할 수 있다. class Employee { String name; public void setName(String name) { this.name = name; } public String getName() { return name; } } public class LEC { public static void main(String[] args) { Employee m = new Emp..
Java 시작하기 (3) 자바 프로그래밍 기초(2) 변수들 자바의 기본 문법은 C/C++과 매우 유사하다. 변수 정의 package FirstProgram; import java.util.Random; public class VariableDefinition { public static void main(String[] args){ int one; int two = 2; // with initialization int three = 3, four; // multiple definitions in one line Random generator = new Random(); // definition + class instantiation } } 변수 이름 문자로 시작해야 한다. 문자, 숫자, 그리고 $를 포함..
문제 링크 Solution 나무를 자를 특정 높이를 구해야 한다. 즉, 특정 숫자를 구해야 하는 것이다. 이 숫자는 어떤 조건을 만족해야 한다. 조건이 무엇인지는 차치하고, 이 두 가지만 먼저 고려해 보자. 전형적인 탐색 알고리즘 문제와 비슷하다. 그래서 이분 탐색을 사용했다. 다만 이미 입력받거나 해서 정해진 특정 숫자를 찾는게 아니라, 나무들의 배열에서 이 숫자보다 큰 높이를 가진 나무들을 잘랐을 때 잘린 부분의 합이 M이 넘는다는 조건을 만족하는 숫자를 찾아야 하는 게 다른 점이다. 또 하나 주의해야 할 점은 그렇게 해서 조건을 만족하는 최댓값을 찾아야 한다는 것이다. 코드에서 ans가 등장한 이유이다. 가령, 입력으로 나무 개수가 2개, 필요한 나무의 길이가 3, 각각의 나무의 길이가 2인 경우에..
Java 시작하기 (2) 자바 프로그래밍 기초 (1) 자바 프로그래밍 기초: "Hello, World!" package FirstProgram; public class HelloWorld { public static void main(String[] args){ System.out.println("Hello, World!"); } } 자바에서 모든 것은 객체(object)이다. 객체는 클래스(class)의 인스턴스(instance)이다. 위 예제 프로그램은 HelloWorld라는 하나의 클래스를 가진다. 클래스는 메서드(methods)를 가질 수 있다. HelloWorld 클래스는 main이라는 하나의 메서드를 가진다. main 메서드는 프로그램의 entry point(starting point)이다. ..
Java 시작하기(1) 1. 자바(Java)란 무엇일까? general-purpose 프로그래밍 언어이다. 2019년 현재 가장 인기 있는 프로그래밍 언어이다. 1-1. 그렇다면, 프로그래밍 언어란 무엇일까? 컴퓨터에서 명령을 수행하기 위해 쓰이는 언어이다. 왜 필요할까? CPU는 기계어의 집합을 이해한다. 기계어는 인간이 이해하고, 사용하기에 너무 어렵다! 그래서 프로그래머들은 기계어로 compile 혹은 interpret되고 실행되는 프로그래밍 언어를 사용해서 응용 프로그램을 만든다. 1-2. 프로그래밍 언어에는 두 가지 종류가 있다. Compiled language 컴파일러(compiler)가 전체 프로그램을 읽고 object code(= machine code or binary code)로 변환한..
자료 구조와 알고리즘(2) 이 포스팅은 Python Cookbook의 내용을 요약하여 작성되었습니다. 지적, 질문은 언제나 환영합니다. 1.6 딕셔너리의 키를 여러 값에 매핑하기 하나의 키에 하나의 값이 매핑된 것을 딕셔너리라 부른다. 키에 여러 값을 매핑하려면, 그 여러 값을 리스트나 세트와 같은 컨테이너에 저장해 두어야 한다. d = { 'a': [1, 2, 3], 'b': [4, 5] } e = { 'a': {1, 2, 3}, 'b': {4, 5} } 이러한 딕셔너리를 쉽게 만들기 위해서 collections 모듈의 defaultdict을 사용한다. defaultdict에는 첫 번째 값을 자동으로 초기화하는 기능이 있다. from collections import defaultdict d = def..