While문

~scanf가 가능해서 사용해봤습니다.

A+B - 5

    int a,b;
    while(~scanf("%d %d", &a,&b)){
        if(a+b != 0)
        printf("%d\n", a+b);
    }

A+B - 4

    int a,b;
    while(~scanf("%d %d", &a,&b)){
        printf("%d\n", a+b);
    }

더하기 사이클

    int num, firNum, secNum, sumNum, count, result;
    result = 0;
    count = 0;
    
    scanf("%d",&num);
    
    if (num < 10)
            num *= 10;

    result = num;

    while (1) {
         firNum = result / 10;
         secNum = result % 10;
         sumNum = firNum + secNum;
         result = (secNum * 10) + (sumNum % 10);
         count++;

         if (num == result)
             break;
    }
    printf("%d", count);

헷갈릴땐 변수 다시 정리하고 세분화

 

C++ 출력만 해보고 앞으로 C#으로 해보겠습니다. 유니티로 취업을 할거고 계속 사용해서 친해져야하는 언어이므로 앞으로 문제는 C#으로 풀어보겠습니다.

 

두 수 비교하기

using System;

class Program {
    static void Main(){
        string str;
        int a,b;
        
        str = Console.ReadLine();
        string[] strArr = str.Split(' ');
        a = Convert.ToInt32(strArr[0]);
        b = Convert.ToInt32(strArr[1]);
        
        if(a < b) 
            Console.WriteLine("<");
        else if(a > b) 
            Console.WriteLine(">");    
        else if(a == b) 
            Console.WriteLine("==");
        else
            Console.WriteLine("잘못된 입력 값입니다.");
    }
}

시험 성적

string str;
int score;

str = Console.ReadLine();
score = Convert.ToInt32(str);

if(score >= 90)
    Console.WriteLine("A");
else if(score >= 80)
	Console.WriteLine("B");
else if(score >= 70)
	Console.WriteLine("C");
else if(score >= 60)
	Console.WriteLine("D");
else
	Console.WriteLine("F");

윤년

string str;
int year;
int a = 4;
int b = 100;
int c = 400;
bool yearBool;

str = Console.ReadLine();
year = Convert.ToInt32(str);

yearBool = year%a == 0 && year%b != 0;

if(yearBool || year%c == 0)
	Console.WriteLine("1");
else
	Console.WriteLine("0");

사분면 고르기

	
    int a,b;

    a = int.Parse(Console.ReadLine());
    b = int.Parse(Console.ReadLine());

    if (a > 0 && b > 0)
        Console.WriteLine("1");
    else if(a < 0 && b > 0)
        Console.WriteLine("2");
    else if(a < 0 && b < 0)
        Console.WriteLine("3");
    else if(a > 0 && b < 0)
        Console.WriteLine("4");
    else
        Console.WriteLine("잘못 입력했습니다.");

Convert.ToInt32 보다 int.Parse 속도, 메모리 면에서 더 유리합니다.

알람 시계

        int h,m;
        int setM;
            
        string[] arrStr = Console.ReadLine().Split(" ");
        setM = 45;
        
        h = int.Parse(arrStr[0]);
        m = int.Parse(arrStr[1]);
        m -= setM;
        if (m < 0) {
            m = Math.Abs(m);
            m = 60 - m;
            h -= 1;
        }
        if(h < 0)
        {
            h = 23;
        } 
        Console.WriteLine("{0} {1}", h,m);

if문 완료했습니다.

 

'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글

C++ 백준 while문  (0) 2021.06.10
Day1 백준 입출력과 사칙연산  (0) 2021.05.25
[알고리즘] C# ArrayList와 LinkedList  (0) 2021.05.15
[알고리즘] C# 배열 재정리  (0) 2021.05.15
[알고리즘] 자료구조?  (0) 2021.05.15

어제 학원 수료가 끝나고 알고리즘의 부족함과 셰이더가 재밌어서 하루 할당량을 정해서 공부 해나갈 생각입니다.

알고리즘 문제, 셰이더 코드 하나, 일단 이렇게 해볼 생각입니다. 좀 더 할수도 있습니다.

일단 알고리즘을 하기 전 유니티 C#을 쓰다보니 와서 C++을 이용한 문제를 풀어볼 생각입니다.

기초 100제에서 하루 20문제로 손 좀 풀고 백준에서 단계별로 학습해볼 생각입니다.

모든 문제는 C++로 풀이하였습니다.

2557번 Hello World

#include <stdio.h>
using namespace std;

int main() {
    printf("Hello World!");
    return 0;
}

10718번 We Love Kriii

printf("강한친구 대한육군\n강한친구 대한육군");

10171번 고양이

printf("\\    /\\\n");
printf(" )  ( ')\n");
printf("(  /  )\n");
printf(" \\(__)|");

위 문제는 \(백 슬래쉬)를 출력을 하는 방법을 알려주는거라서 재미로 맞춰도 좋지만 시간을 뻇기지 않기 위해 복사를 추천합니다.

10172번 개

printf("|\\_/|\n");
printf("|q p|   /}\n");
printf("( 0 )\"\"\"\\\n");
printf("|\"^\"`    |\n");
printf("||_/=\\\\__|");

이건 " 출력 \(백 슬래쉬) 출력을 중점을 두고 있습니다. 띄우기 몇칸인지 출력문에서 복사해서 사용하는걸 추천합니다.

1000번 A+B

 int a;
 int b;
 scanf("%d %d", &a,&b);
 printf("%d", a+b);

1001번 A-B

int a;
int b;
scanf("%d %d", &a,&b);
printf("%d", a-b);

10998번 AxB

int a;
int b;
scanf("%d %d", &a,&b);
printf("%d", a*b);

10869번 사칙연산

 int a;
 int b;
 scanf("%d %d", &a,&b);
 printf("%d\n%d\n%d\n%d\n%d\n", a+b,a-b,a*b,a/b,a%b);

10430번 나머지

int a,b,c;
scanf("%d %d %d", &a,&b,&c);
printf("%d\n%d\n%d\n%d\n", (a+b)%c, ((a%c)+(b%c))%c, (a*b)%c, ((a%c)*(b%c))%c);

2588번 곱셈

int a,b;
scanf("%d %d", &a,&b);

printf("%d\n", a * (b % 10));
printf("%d\n", a * ((b % 100) / 10));
printf("%d\n", a * (b / 100));
printf("%d", a * b);

출력 단계 완료했습니다.

1008번 A/B 빼먹게 있어 추가했습니다.

   double a;
   double b;
   scanf("%lf %lf", &a,&b);
   printf("%.13lf\n", a/b);

 

'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글

C++ 백준 while문  (0) 2021.06.10
Day5 C# 백준 if문  (0) 2021.06.02
[알고리즘] C# ArrayList와 LinkedList  (0) 2021.05.15
[알고리즘] C# 배열 재정리  (0) 2021.05.15
[알고리즘] 자료구조?  (0) 2021.05.15

참고 자료 - ArrayList와 LinkedList란 무엇인가? (tistory.com)

 

ArrayList(선형리스트) 

개념

선형 리스트는 배열과 같이 연속되는 기억장소에 저장되는 리스트를 말한다.

연접 리스트(Dense List) 또는 축차 구조(Sequential Structure)라고도 한다.

차이

배열은 고정된 크기의 연속된 배열요소들의 집합이므로 배열을 초기화 할 때 총 배열 요소의 수를 미리 지정해야 한다. 하지만 경우에 따라 배열요소가 몇 개나 필요한 지 미리 알 수 없는 경우가 있으며, 중간에 필요에 따라 배열을 확장해야 하는 경우도 있다..NET에는 이러한 동적 배열을 지원하는 클래스로 ArrayList와 List<T>이 있다. 이들 동적 배열 클래스들은 배열 확장이 필요한 경우, 내부적으로 배열 크기가 2배인 새로운 배열을 생성하고 모든 기존 배열 요소들을 새로운 배열에 복사한 후 기존 배열을 해제한다.

 

선형리스트의 특징

1. 가장 간단한 자료구조이다.

2. 접근속도가 빠르다.

3. 중간에 자료를 삽입하기 위해서는 연속된 빈 공간이 있어야 한다.

4. 기억장소를 연속적으로 배정받기 때문에 기억장소 이용 효율은 밀도가 1로서 가장 좋다.

5. 자료의 개수가 n개일 때 삽입 시의 평균 이동 횟수는 (n+1)/2이고, 삭제 시에는 (n-1)/2이다.

6. 삽입, 삭제 시 자료의 이동이 필요하기 때문에 작업이 번거롭다.

 

 

LinkedList(연결리스트) 

개념

링크드 리스트 (Linked List, 연결 리스트)는 데이타를 포함하는 노드들을 연결하여 컬렉션을 만든 자료 구조로서 각 노드는 데이타와 다음/이전 링크 포인터를 갖게 된다.단일 연결 리스트(Singly Linked List)는 노드를 다음 링크로만 연결한 리스트이고 이중 연결 리스트는 각 노드를 다음 링크와 이전 링크 모두 연결한 리스트이다. 만약 링크를 순환해서 마지막 노드의 다음 링크가 처음 노드를 가리키게 했을 경우 이를 순환 연결 리스트 (Circular Linked List)라 부른다.

차이

연결 리스트는 자료들을 반드시 연속적으로 배열시키지는 않고 임의의 기억공간에 기억시키되, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료 구조이다.

 

연결 리스트의 특징

1. 노드의 삽입, 삭제 작업이 용이하다.

2. 기억공간이 연속적으로 놓여 있지 않아도 저장이 가능하다.

3. 연결을 위한 링크(포인터) 부분이 필요하기 때문에 순차 리스트에 비해 기억공간 이용 효율이 좋지 않다.

4. 연결을 위한 포인터를 찾는 시간이 필요하기 때문에 접근 속도가 느리다.

5. 중간 노드 연결이 끊어지면 그 다음 노드를 찾기 힘들다.

6. 희소 행렬 을 링크드 리스트로 표현하면 기억장소가 절약된다.

7. 트리를 표현할 때 가장 적합한 자료 구조이다.

 

연결리스트의 종류

'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글

C++ 백준 while문  (0) 2021.06.10
Day5 C# 백준 if문  (0) 2021.06.02
Day1 백준 입출력과 사칙연산  (0) 2021.05.25
[알고리즘] C# 배열 재정리  (0) 2021.05.15
[알고리즘] 자료구조?  (0) 2021.05.15

C# 배열(Array)

자료형[] 배열명 = new 자료형[크기];

int[] arr = net int[i] {4, 9, ...}

첨자값(index, 인덱스)은 항상 0부터 시작한다.

출력 방법

Console.WriteLine("arr[0] = {0}", arr[0]);

여러 배열 선언 방법

int[] arr = {4,9,19,2}; / int[] arr = new int[]{4,5,1,23,12};

System.Array (using System) 선언 시 Array만 적으니 다른 코드 공부 시 혼란 주의, 아래는 Array 함수 일부만 정리했습니다.

 

get 함수

Rank(차원 수,길이를 가져옵니다. 1차원은 1 2차원은 2를 반환), Length(배열 길이)

 

set 함수

==========================

복사 관련 함수 정리

a[0] = b[0] 식으로 코드를 작성하게 되면 참조값만 복사가 이루어진다고 한다. * 참조 : 객체의 실제 위치를 가리키는 포인터

 

Clone() Shallow Copy (얕은 복사)

Shallow Copy는 배열요소의 값을 그대로 복사하는 방식 Value Type(변수)이면 실제 값이 그대로 복사되어 아무 문제가 없으나 Reference Type(참조)의 값인 경우 레퍼런스만 복사하기 때문에, 동일한 Reference Type(참조)객체를 가리키는 포인터만 복사하는 효과가 있다. (단순 지정한 값을 복사 (참조값일 시 참조값만 복사)

배열B = (자료형[])배열A.Clone();  // 배열 A를 배열 B에 통째로 복사

 

CopyTo() Deep Copy(깊은 복사) // 인스턴스 메서드

Deep Copy는 Reference Type(참조)객체에 대해 실제 새로운 Reference(참조)객체를 생성하고 내용까지 전부 복사하기 때문에 완변한 복제본으로 볼 수 있다. (참조 값 주소를 찾아 안에 내용까지 복사)

Array.Copy(배열A, 배열B, 2)  // 배열 A의 값을 배열 B로 0번재부터 2개 복사 (정적메서드)

Array.Copy(배열A, 0, 배열B, 2, 3)  // 배열 A의 0번째 값부터 3개를 배열 B, 2번째부터 복사

==========================

ForEach 지정한 배열의 각 요소에서 지정한 동작을 수행합니다.

Array.ForEach<데이터타입>(동작을 수행할 배열, new Action<데이터타입>(액션);

===

다차원 배열

자료형[,] 배열명 = new 자료형 [행, 열]; // 기본 형태 - 자료형 [,] 에 ,가 두개 일 시 3차원 배열이 되는겁니다.

int [,] arr2 = new int[2,3]
{
{2, 3, 4} ,
{3, 6, 7}
};

보기 좋게 작성해봤습니다. 제가 주로 사용하는 형식입니다. 

'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글

C++ 백준 while문  (0) 2021.06.10
Day5 C# 백준 if문  (0) 2021.06.02
Day1 백준 입출력과 사칙연산  (0) 2021.05.25
[알고리즘] C# ArrayList와 LinkedList  (0) 2021.05.15
[알고리즘] 자료구조?  (0) 2021.05.15

프로그래밍 언어를 다루는 사람이라면 배워야하고 필수적인 것입니다.

그래서 이번엔 자세히 공부해볼 생각입니다. 그럼 실전에 들어가기 앞서 이론적인 부분을 공부하고 들어가는게 좋은것 같습니다.

들어가기 앞서 자료구조가 무엇인지 알고리즘이 무엇인지 확실히 잡고 가겠습니다.

참고 영상 링크

본 사람은 봤겠지만 정리 잘해주셨고 자료구조, 알고리즘에 기본적인 베이스를 깔아줍니다.

본 내용 토대로 게임에 접목시켜 이해 해보도록 하겠습니다.

일단 자료 구조 먼저입니다.

자료구조 - 서비스나 어플리케이션을 메모리에 어떻게 구조적으로 잘 정리해서 담아두고 관리하고 최종적으로 가장 효율적인 방식으로 필요한 데이터에 빠르게 접근 하고 필요한 접근, 수정, 삽입, 삭제 할 수 있도록 도와줍니다.

현재 지식으로 정리하자면 게임 내부에서 메모리를 구조적으로 정리, 관리하여 가장 효율적인 방식으로 필요한 데이터(DB)를 빠르게 접근하고 수정 삽입 삭제가 가능 하도록 도와줍니다. 

자료 구조 그래프

이미지 출처 : [Algorithm] 자료구조란 무엇인가? (tistory.com)

'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글

C++ 백준 while문  (0) 2021.06.10
Day5 C# 백준 if문  (0) 2021.06.02
Day1 백준 입출력과 사칙연산  (0) 2021.05.25
[알고리즘] C# ArrayList와 LinkedList  (0) 2021.05.15
[알고리즘] C# 배열 재정리  (0) 2021.05.15

+ Recent posts