2020-12-18 자바를 처음 공부하다 보면, 누구나 한 번쯤 주사위 확률 예제를 봤을 것이다. 이 경우 Math 클래스의 random();이라는 메서드를 사용해서 0 ~ 1의 난수를 얻어 이후 정수를 더해 Integer값을 얻어 냈을 것이다. 그렇다면 double 난수가 아닌 int / long /float와 같은 난수뿐 아니라, boolean 난수를 얻으려면 어떻게 해야 할까? 바로 Random클래스를 사용하면 이와 같은 문제를 쉽게 해결할 수 있다. 아래의 예제를 살펴보자. package tRandom; import java.util.Random; public class main { public static void main(String[] args) { Random ran = new Random..
2020-12-17 문제 정휘는 애니메이션계의 영원한 명작이자 최고의 흥행작 겨울왕국 2를 자그마치 싱어롱으로 관람하려고 한다! 겨울왕국에 등장하는 캐릭터 중 엘사를 너무 좋아하는 정휘는 L4, 즉 L열의 네 번째 자리에 앉으려고 한다. 그러나 정휘가 가려는 영화관은 좌석 번호가 자연수 하나로 표현되기 때문에 예매를 하기가 힘들다. 정휘가 겨울왕국을 관람하는 영화관은 세로로 N칸, 가로로 M칸인 좌석들로 구성되어 있다. 좌석의 번호는 좌상단 끝에 있는 A열의 첫 번째 자리부터 1번으로 시작하여 오른쪽으로 번호가 하나씩 증가하다가 끝에 다다르면 B열의 첫 번째 자리부터 또 오른쪽으로, C열의 첫 번째 자리부터 또 오른쪽으로 진행하는 것을 반복하면서 숫자가 증가해 나간다. 정휘가 좌석 L4를 빠르게 선점하여..
2020-12-15 문제 회의가 끝났고, 이제 악수를 하는 시간이다. 모든 사람은 직사각형 탁자 하나의 한 면에 앉아있다. 자리를 벗어나지 않고 악수를 하는 방법의 수는 총 몇 가지일까? 각 사람들은 자신의 왼쪽이나 오른쪽에 있는 사람들과 악수를 할 수 있다. (안 할 수도 있다) 입력 첫째 줄에 회의에 참석한 사람의 수 n (1 ≤ n ≤ 10,000,000)이 주어진다. 출력 첫째 줄에 악수를 하는 방법의 수를 출력한다. 수가 매우 커질 수 있기 때문에, 마지막 자리만 출력한다. n=4인 경우에는 5가지 방법이 있다. import java.util.Scanner; public class TemplateA { public static void main(String[] args) { //피보나치 수열 문..
2020-12-14 StringBuilder는 문자열을 버퍼에 담에 그 안에서 추가 수정 삭제 작업을 할 수 있도록 도와주는 클래스이다. 하지만 이와 같은 클래스가 왜 필요한지 궁금할 수가 있다. 아래의 예제 코드를 가지고 왜 필요한지 이야기해보자. String str = "ABC"; str += "D"; 몇몇의 사람들은 위의 코드와 같이 따로 StringBuilder를 사용하지 않고 기존 String 변수에 새로운 값을 넣어주면 쉽게 해당 문자열을 변경할 수 있는 거 아닌가 라고 생각할 수 있다. 물론 해당 방법으로도 문자열을 수정할 수 있지만, 여기에는 큰 단점이 있다. 바로 String은 연산과 같은 과정을 통해 새로운 문자열로 변경될 경우 새로운 스트링 객체로 리턴이 된다는 것이다. 이러한 문제는..
2020-12-13 문제 2015, 2016년에 이어 2017년에도 연세대학교 교내 프로그래밍 경시대회가 열린다. 택희, 영훈이, 남규는 열심히 문제를 만들었고, 이에 대한 보상으로 과사로부터 사탕 N개를 받았다. N개의 사탕을 적절히 나눠 가지기 위해 토론한 결과, 아래와 같은 방식으로 사탕을 나누기로 결정하였다. 남는 사탕은 없어야 한다. 남규는 영훈이보다 2개 이상 많은 사탕을 가져야 한다. 셋 중 사탕을 0개 받는 사람은 없어야 한다. 택희가 받는 사탕의 수는 홀수개가 되어서는 안 된다. 이제 사탕을 적절히 나누어 집에 돌아가던 중, 택희는 위와 같은 규칙을 만족하도록 세 명에게 사탕을 나누어 주는 방법의 수가 궁금해졌다. 사탕의 개수 N이 주어지면, 사탕을 세 사람에게 분배하는 서로 다른 경우의..
2020-12-11 toString 메서드는 Object 클래스에 속해있는 메서드이다. 기능으로는 객체의 문자정보를 "Class(이름)@16진수의 해시 코드"로 Console 창에 출력하는 기능을 가지고 있다. 위의 코드는 단순하게 Object 객체를 하나 만들고 해당 객체를 toString 메서드로 출력하는 코드로 위와 같은 결과를 얻을 수 있다. 보통은 Object 자체의 메서드로는 활용하지 않고 Date 와 같은 현재의 날짜 정보를 출력할 때나 아니면, 별개의 클래스에 Override(재정의)하여 사용하곤 한다. 아래는 구체적인 예이다. 위는 Date 타입의 객체를 생성한 후 기존에 Object 클래스와 마찬가지로 출력해보았다. 결과적으로 현재의 날짜와 시간이 정상적으로 출력되는 것을 확인할 수 있..