분류 전체보기

    [백준] 1193 - 좌표계 도입

    [백준] 1193 - 좌표계 도입

    문제: www.acmicpc.net/problem/1193 1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net X가 주어지면 분수값을 찾아야 한다. 하지만 X를 가지고 바로 분수값을 찾기가 쉽지가 않다. 위의 표를 다음과 같은 좌표계에 대입해보자. 왼쪽 상단을 원점으로 하는 직교 좌표계이다. 그리고 분수와 분모의 합이 같은 칸끼리 선으로 이으면 위와 같이 된다. 저 직선의 방정식을 구해보자. 분수와 분모의 합이 k일 때, 계산하기 쉽게 K = k - 1 이라고 두면 x + y = K 이므로 y = - x + K 이다. 즉 예를 들어, 위의 그림에서 직선의 방정식은 y = -x + 5 이다. y = - x + K 직선 위의 칸들 중 왼쪽 하단부터..

    [백준] 2292 - 벌집 구조

    [백준] 2292 - 벌집 구조

    문제: www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 한 칸씩 움직일 때마다 숫자가 1씩 증가한다. 한 바퀴 돌 때마다 움직여야 하는 횟수가 6씩 증가한다. 따라서 바깥으로 한 칸씩 움직일 때 지나는 수들은 계차수열이다. 이때 육각형이므로 계차는 6이다. 따라서 아래와 같은 수열을 생각해보자 2 + n(n-1)/2 * 6 = 2 + 3n(n-1) Bn = 7 + (n(n+1)/2 - 1) * 6 시계방향으로 육각형을 감싸 돌며 더 큰 육각형이 생길 때, 그 육각형의..

    [백준] 2839 - 자연수를 서로 다른 두 자연수의 합으로 나타내기

    [백준] 2839 - 자연수를 서로 다른 두 자연수의 합으로 나타내기

    문제 : www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net N = 3x + 5y 에서 x + y의 최솟값을 구하는 문제이다. ( 3

    [자바(java)] 쉬프트 연산자

    자바(java) - 쉬프트 연산자 1. >> (산술적 오른쪽 쉬프트) 비트를 오른쪽으로 이동시킨다. 이때, 가장 오른쪽에 위치한 비트는 유지한다. 가장 오른쪽에 위치한 비트는 십진수로 변환했을 때의 부호를 의미하기 때문에, 산술적 오른쪽 쉬프트는 변수의 부호를 유지한다고 할 수 있다. byte a = (byte) 0b00110011; byte b = (byte) (a >> 2); // b = 0b00001100 byte a = (byte) 0b10110011; byte b = (byte) (a >> 2); // b = 0b11101100 산술적 오른쪽 쉬프트를 시행할 때마다 10진수로 변환한 값이 2로 나눠진다. 2. > (논리적 오른쪽 쉬프트) 비트를 오른쪽으로 이동시킨다. 이때, 가장 오른쪽에 위치한..

    [C# / 객체지향] 델리게이트 (Delegate)

    [C# / 객체지향] 델리게이트 (Delegate)

    객체지향 - 델리게이트 (Delegate) 델리게이트는 직역하면 대리자이다. 정확히는 함수를 대리하므로 함수 대리자이다. int, short 같은 타입은 정수를 가질 수 있지만, 델리게이트 타입은 함수를 가질 수 있다. 위와 같은 함수를 가지는 델리게이트 타입을 만들어보자. 델리게이트 타입을 만들 때는 대리할 함수의 반환값과 매개변수를 일치하게 해야한다. Say 함수의 반환 타입이 void이고 매개변수 타입이 string이므로 아래와 같이 선언해주자. delegate void MyDelegate(string txt); 이렇게 하면 MyDelegate 라는 타입이 만들어진다. 이 타입은 반환 형식이 void이고 string 타입을 매개변수로 받는 함수를 대리할 수 있다. 이제 이 타입에 say 함수를 넣어..

    [백준] 4673 - 셀프 넘버

    [백준] 4673 - 셀프 넘버

    문제 : https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 www.acmicpc.net 함수 d(n) = m 에서 n을 m의 생성자라고 한다. 이때 생성자를 갖지 않는 숫자를 셀프넘버라고 정의하고 있다. 즉 셀프넘버는..

    [백준] 10818 - 배열에서 최대 최소 구하기

    [백준] 10818 - 배열에서 최대 최소 구하기

    문제 : https://www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 수열의 최대값과 최솟값을 구하는 문제이다. 수열은 배열로 받자. 이제 입력받은 수열에서 최댓값과 최솟값을 구해야 한다. 당장 생각나는 알고리즘은 다음과 같다. 1. 변수를 하나 만들고 거기에 수열의 첫째 항을 집어넣는다. 2. 수열의 다른 모든 수들과 비교하면서, 원래 값이 더 크면 그대로 가고, 다른 수가 더 크면 변수에 그 수를 대신 집어넣는다. 최..

    [C# / 객체지향] 9. 추상 클래스 (Abstract Class)

    [C# / 객체지향] 9. 추상 클래스 (Abstract Class)

    객체지향 - 추상 클래스 (Abstract Class) 동물원 게임을 만들고 싶다고 하자. 동물원에는 포유류, 파충류, 어류 등 다양한 종류의 생명체들이 살고 있다. 이 생명체들을 구현하려면 단순히 포유류, 파충류, 어류 클래스를 각각 만들어버릴 수도 있다. 하지만 추상 클래스를 이용하면 더 명확하게 구현이 가능하다. 추상 클래스는 추상 메서드를 갖는 클래스다. 다만 반드시 추상 메서드를 가질 필요는 없다. (그러나 추상 메서드가 없는 클래스를 굳이 추상 클래스로 만들 필요가 있을까? 게다가 추상 메서드는 추상 클래스만 가질 수 있다.) 추상 클래스를 통해 생명체의 움직임을 구현해보자. 포유류는 걷고, 파충류는 기어다니고, 어류는 헤엄친다고 치자. 세 종류는 모두 생명체이다. 따라서 Life 클래스를 부..

    [C#] 은행 게임 코드 (수정본)

    Bank Class ( 환전 메서드 오버로드됨 ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 12..

    [C# / 게임] 은행 게임 만들어보기 (객체지향 정리)

    [C# / 게임] 은행 게임 만들어보기 (객체지향 정리)

    은행 게임 만들어보기 간단한 은행 게임을 만들어 보려고 한다. 어떤 식으로 만들지는 전혀 정하지 않았다. 일단은 생각나는 대로 만들어 볼건데. 우선 Money 클래스를 정의하자. 간단한 생성자와 프로퍼티를 가진 Money 클래스이다. 이 클래스의 자식 클래스로 Gold, Silver, Bronze 를 정의한다. 이로써 돈의 단위 세가지를 만들었다. 이 단위들을 환전해주는 시스템을 구현해보자. 환전은 은행에서 이루어진다. 따라서 이번엔 은행 클래스를 만들어보자. 은행은 하나만 있으면 된다. 현실에서는 은행이 여러개이긴 하지만.. 은행이 여러개인 게임은 그리 흔하지 않다. 게임에서의 은행은 영리적 목적으로 운영되는게 아니라, 유저의 편의를 위해 운영되는 시스템이기 때문이다. 롤이나 메이플의 은행을 생각해보면..

    [C# / 객체지향] 8. 다형성 - 오버로드 (Method Overload)

    객체지향 : 다형성 - 오버로드 (Method Overload) 1. 메서드 오버로드 더하기를 하는 메서드를 구현해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { Console.WriteLine(Calculate.Plus(3, 5)); } } class Calculate { static public int Plus(int a, int b) { return a + b; } } } http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f..

    [C# / 객체지향] 8. 다형성 - 메서드 오버라이드 (Method Override)

    [C# / 객체지향] 8. 다형성 - 메서드 오버라이드 (Method Override)

    객체지향 : 다형성 - 메서드 오버라이드 (Method Override) 앞서 객체지향의 4대 특성 중 추상화, 캡슐화, 상속은 다루어 보았다. 이번에는 마지막으로 다형성에 대해 알아볼 것이다. 아래 예제를 보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 using System; namespace example4 { class Program { static void Main(string[] args) { Life life = new Life(); Human human = new Human(); Fish fish = new Fish(); l..

    [C# / 객체지향] 7.  클래스 상속 (class inheritance)

    [C# / 객체지향] 7. 클래스 상속 (class inheritance)

    객체지향 - 클래스 상속 (class inheritance) 사람, 물고기, 새. 이 세가지 대상들을 구현하고 싶을 때 상속을 사용하지 않는다면 이렇게 구현할 수 있을 것이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Human { void Eat() { } void Move() { } void Think() { } class Fish { void Eat() { } void Move() { } } class Bird { void Eat() { } void Move() { } } 그런데 겹치는 부분이 보인다. 중복되는 코드는 적을수록 좋다. 따라서 상속을 사용해 중복되는 코드를 없애보자. 상속이 무엇인지 잘 모르겠다면 재산 상속을 떠올려 보자. 다만 ..

    [C# / 객체지향] 6. 캡슐화와 정보 은닉

    [C# / 객체지향] 6. 캡슐화와 정보 은닉

    객체지향 - 캡슐화와 정보 은닉 캡슐화는 올바른 추상화와 정보 은닉을 통해 이루어진다. 추상화는 저번 포스팅에서 다뤄보았다 : 2019/12/12 - [프로그래밍/c#] - [C# / 객체지향] 2. 추상화는 무엇일까 [C# / 객체지향] 2. 추상화는 무엇일까 객체지향 - 추상화는 무엇일까 추상화는 클래스라는 기능을 통해 구현된다. 내가 프로그램 상에서 자동차라는 객체를 만들어보고 싶다면 어떻게 해야 할까? class Car { } 이렇게 클래스를 하나 만들면 된다. 이때.. lwamuhaji.tistory.com 간단히 말해 캡슐 안에는 관련된 정보가 들어 있어야 한다는 뜻이다. (감기약 캡슐 안에 소화제가 들어 있다면 쓰기가 매우 어려울 것이다.) 추상화가 잘 되고 나면, 남은 것은 정보 은닉인데 ..

    [C# / 객체지향] 5. 네임스페이스(namespace)

    객체지향 - 네임스페이스(namespace) 네임스페이스는 클래스에 비해 그 개념이 간단하다. 말 그대로 이름공간인데, 클래스들의 이름이 서로 충돌하는 것을 막기 위한 장치라고 보면 된다. 예를 들어 오토바이와 자동차를 생각해보자. 두 타입 모두 핸들을 가지고 있다. 이 경우 네임스페이스를 사용해 핸들 클래스를 구분할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 namespace Motorcycle { class Handle { } } namespace Car { class Handle { } } 물론 네임스페이스까지 같을 경우 충돌이 일어난다.