정신과 시간의 방

전체 글 317

카테고리 설명
게임 프로그래머가 되기 위한 청춘의 기록
  • 문제 풀이#include #include using namespace std;int main(){ int n = 0, count = 0; string number = ""; cin >> n; for (int i = 666; ; i++) { number = to_string(i); // 666이 포함된 경우 count + 1; if (number.find("666") != -1) { count++; } // 목표하는 n번만큼 count가 된 경우 // 결과 출력 후 종료 if (count == n) { cout

  • 문제 풀이#include using namespace std;int main(){ int t = 0, k = 0, n = 0; // 아파트 호수를 나타내는 n의 최댓값이 14이기 때문에 15*15 배열을 미리 선언해둔다. int apt[15][15] = {}; // 총 몇 번 프로그램을 반복할 것인지 입력받음 cin >> t; // 0층에는 i호수에 i명이 산다고 했으므로 0층부터 먼저 각 호수에 몇명이 사는지 채워준다. // 이때 호수는 1부터 시작하므로 i의 초기값은 1이 된다. for (int i = 1; i > k >> n; // 입력받은 층수와 호수에 해당하는 거주민 수 결과를 출력해준다. cout

  • 문제 풀이#include using namespace std;int GetGCD(int a, int b){ /* 유클리드 알고리즘 : 주어진 두 수 사이에 존재하는 최대공약수(GCD)를 구함 STEP1. 큰 수 a를 작은 수 b로 나눈 나머지 값 number를 mod 연산으로 구한다. */ int number = a % b; /* STEP2. 나머지값 number가 0이 될 때까지 반복하며 나누었던 수 b와 이전에 얻은 나머지값 number를 mod 연산한다. */ while (number != 0) { a = b; b = number; number = (a % b); } /* STEP3. 나머지가 0이 되도록 딱 맞아떨어지는 경우 두개의 수 중에서 b가 최대공약..

  • 문제 풀이#include using namespace std;int main(){ // target이 되는 방 번호 int n = 0; // 최종 도달 층 수, 처음 시작할 때는 1층에서 시작하기 때문에 1로 시작 int floor = 1; // n까지 향하는 동안 통과한 방 수, 처음 시작할 땐 1번 방에서 시작하기 때문에 1로 시작 int roomCount = 1; cin >> n; // 목표하는 n번 방에 도달할 때까지 계속 반복하며 룸을 카운팅함 while (roomCount

  • 운영체제 소개운영체제란?- 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어운영체제 이해하기Q. 운영체제 없이도 컴퓨터가 작동하나?A. 운영체제가 없어도 작동할 수 있으나 확장 등의 기능에 제약이 따른다.Q. 운영체제가 있는 기계와 없는 기계의 차이?A. 운영체제가 있는 기계는 다양한 응용 프로그램을 설치해 사용할 수 있고 성능 향상을 위한 새로운 기능을 쉽게 추가할 수 있다. 즉, 확장성이 있다.Q. 운영체제는 성능 향상에만 사용되는가?A. 운영체제는 성능 향상 외에도 자원을 관리하고 보호하는 역할을 한다. 또한 사용자에게 편리한 인터페이스 환경을 제공한다.Q. 운영체제는 자원을 어떻게 관리하는가?A. 사용자가 직접 자원에 접근하는 것을 막음으로써 컴퓨터..

  • 문제 풀이#include using namespace std;int main(){ // a => 낮에 올라가는 높이 // b => 밤에 미끄러지는 높이 // v => 목표 높이 // (a - b) => 달팽이가 하루에 올라갈 수 있는 높이 // 그러나 낮에 달팽이가 올라갈 수 있는 높이 a가 // 남은 목표높이보다 크다면? 밤에 내려가지 않고 바로 도착가능 // 따라서 (a - v)한 값을 (a-b)로 나눈 높이 묶음 만큼 채워주면 // 달팽이가 마지막으로 올라가는 날 이전의 날짜가 총 며칠인지가 나온다. int a, b, v; cin >> a >> b >> v; // 만약 애초에 입력받은 값에서 // a가 목표하는 높이인 v보다 큰 경우 // 아침에 하루만 올라가면 바로 종점에 도달하기 때문에 // 필..

  • 문제 풀이#include using namespace std;int main(){ // 초기값 int n = 0; cin >> n; // 분해합은 초기에 받은 n보다 큰 수가 된다. // 따라서 n까지 반복문을 돌려서 n보다 작은 모든 수의 분해합을 탐색한다. for (int i = 1; i  메모이 문제는 완전탐색 알고리즘인 브루트 포스에 속하는 문제다.완전탐색 알고리즘은 가능한 모든 경우의 수를 모두 탐색하며 요구조건에 충족되는 결과만을 찾아낸다.선형 구조에서의 순차 탐색, 비선형 구조에서의 DFS, BFS가 기본적으로 사용된다.또한 이 문제는 각 자릿수끼리의 값을 분해한 값을 구해 문제 풀이에 사용하는 문제이기도 하다.아래의 코드가 바로 자릿수를 구하는 코드 == k진수를 맨 끝자리부터 구해나가는..

  • 보호되어 있는 글입니다.

작성일
2024. 6. 18. 08:40
작성자
risehyun
  • 문제

 

  • 풀이
#include <iostream>
#include <string>
using namespace std;

int main()
{
	int n = 0, count = 0;
	string number = "";

	cin >> n;

	for (int i = 666; ; i++)
	{
		number = to_string(i);

		// 666이 포함된 경우 count + 1;
		if (number.find("666") != -1)
		{
			count++;
		}

		// 목표하는 n번만큼 count가 된 경우 
		// 결과 출력 후 종료
		if (count == n)
		{
			cout << i;
			break;
		}
	}

	return 0;
}
작성일
2024. 6. 17. 21:30
작성자
risehyun
  • 문제

 

  • 풀이
#include <iostream>
using namespace std;

int main()
{
	int t = 0, k = 0, n = 0;

	// 아파트 호수를 나타내는 n의 최댓값이 14이기 때문에 15*15 배열을 미리 선언해둔다.
	int apt[15][15] = {};


	// 총 몇 번 프로그램을 반복할 것인지 입력받음
	cin >> t;

	// 0층에는 i호수에 i명이 산다고 했으므로 0층부터 먼저 각 호수에 몇명이 사는지 채워준다.
	// 이때 호수는 1부터 시작하므로 i의 초기값은 1이 된다.
	for (int i = 1; i < 15; i++)
	{
		apt[0][i] = i;
	}

	/*
		y층 x호에 거주중인 사람은
		해당 층보다 아래에(y - 1) 1호실부터
		x호실까지 거주하는 사람들의 총 합이다.

		따라서 apt[y][x]의 결과값은 apt[y-1][z(z는 1~x까지의 수)]을 반복해서 합산한 값이 된다.
		이렇게 계산한 값을 15*15 배열에 하나씩 계산해서 넣어준다.
	*/
	for (int y = 1; y < 15; y++)
	{
		for (int x = 1; x < 15; x++)
		{
			for (int z = 1; z <= x; z++)
			{
				apt[y][x] += apt[y - 1][z];
			}
		}
	}


	for (int i = 0; i < t; i++)
	{
		cin >> k >> n;

		// 입력받은 층수와 호수에 해당하는 거주민 수 결과를 출력해준다.
		cout << apt[k][n] << '\n';
	}

	return 0;
}
작성일
2024. 6. 14. 22:34
작성자
risehyun
  • 문제

 

  • 풀이
#include <iostream>
using namespace std;

int GetGCD(int a, int b)
{
	/*
		유클리드 알고리즘 : 주어진 두 수 사이에 존재하는 최대공약수(GCD)를 구함
		
		STEP1. 큰 수 a를 작은 수 b로 나눈 나머지 값 number를 mod 연산으로 구한다.
	*/
	int number = a % b;

	/*
		STEP2. 나머지값 number가 0이 될 때까지 반복하며
		나누었던 수 b와 이전에 얻은 나머지값 number를 mod 연산한다.
	*/
	while (number != 0)
	{
		a = b;
		b = number;

		number = (a % b);
	}

	/* 
           STEP3. 나머지가 0이 되도록 딱 맞아떨어지는 경우
	   두개의 수 중에서 b가 최대공약수가 된다. 
	*/
	return b;
}

int main()
{
	int x = 0, y = 0, maxResult = 0, minResult = 0;

	cin >> x >> y;

	// 유클리드 호제법을 사용해서 최대공약수를 구한다.
	maxResult = GetGCD(x, y);

	cout << maxResult << '\n';

	// 최소공배수를 구한다.
	// (x * y)의 곱을 최대공약수로 나눠준 값이 최소공배수가 된다.
	minResult = (x * y) / maxResult;

	cout << minResult;

	return 0;
}

 

  • 메모
    유클리드 호제법이라는 알고리즘을 사용하여 푸는 문제였다.
작성일
2024. 6. 13. 21:36
작성자
risehyun
  • 문제

 

  • 풀이
#include <iostream>
using namespace std;

int main()
{
	// target이 되는 방 번호
	int n = 0;

	// 최종 도달 층 수, 처음 시작할 때는 1층에서 시작하기 때문에 1로 시작
	int floor = 1;

	// n까지 향하는 동안 통과한 방 수, 처음 시작할 땐 1번 방에서 시작하기 때문에 1로 시작
	int roomCount = 1;

	cin >> n;

	// 목표하는 n번 방에 도달할 때까지 계속 반복하며 룸을 카운팅함
	while (roomCount < n)
	{	
		// 한 층은 층 수 * 6으로 구성되어 있음
		roomCount += (6 * floor);
		
		// 다음 층으로 넘어감
		floor++;
	}

	cout << floor;

	return 0;
}

 

작성일
2024. 6. 6. 22:53
작성자
risehyun
운영체제 소개
  • 운영체제란?
    - 사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 소프트웨어

  • 운영체제 이해하기
    Q. 운영체제 없이도 컴퓨터가 작동하나?
    A. 운영체제가 없어도 작동할 수 있으나 확장 등의 기능에 제약이 따른다.

    Q. 운영체제가 있는 기계와 없는 기계의 차이?
    A. 운영체제가 있는 기계는 다양한 응용 프로그램을 설치해 사용할 수 있고 성능 향상을 위한 새로운 기능을 쉽게 추가할 수 있다. 즉, 확장성이 있다.

    Q. 운영체제는 성능 향상에만 사용되는가?
    A. 운영체제는 성능 향상 외에도 자원을 관리하고 보호하는 역할을 한다. 또한 사용자에게 편리한 인터페이스 환경을 제공한다.

    Q. 운영체제는 자원을 어떻게 관리하는가?
    A. 사용자가 직접 자원에 접근하는 것을 막음으로써 컴퓨터 자원을 보호한다.

    Q. 사용자는 숨어 있는 자원을 어떻게 이용할 수 있나?
    A. 운영체제가 제공하는 사용자 인터페이스와 하드웨어 인터페이스를 이용하여 자원에 접근한다.
    +) 운영체제는 일종의 레스토랑 같다. 손님(사용자)에게 주문을 받으면(자원을 요구받음) 대신 요리(자원)를 제공한다. 만약 직접 요리를 하려고 한다면 요리를 하려는 여러 사람(동시에 실행 중인 응용 프로그램들)에게 공동의 도구(자원)를 적절히 나눠준다.

  • 운영체제의 역할
    1, 자원 관리
    2. 자원 보호
    3. 하드웨어 인터페이스 제공(키보드, 마우스 호환 등)
    4. 사용자 인터페이스 제공(GUI)

  • 운영체제의 목표
    운영체제의 목표는 다음과 같이 운영체제의 역할과 함께 묶어서 이해하면 쉽다.

    자원 관리 ↔ 효율성
    자원 보호 ↔ 안정성
    하드웨어 인터페이스 제공 ↔ 확장성
    사용자 인터페이스 제공 ↔ 편리성

    1. 효율성 (For 자원관리)
    - 같은 자원을 관리하더라도 효율적으로 관리해야 한다.
    - 적은 자원을 사용하여 결과를 빠르게 보여주는 것이 효율적인 운영체제이다.
    - 이를 위해 일반적으로 운영체제의 크기를 최소화하고 운영체제가 사용하는 코드를 최적화해야 한다.

    2. 안정성 (For 자원보호)
    - 운영체제가 불안하다면 그 피해가 고스란히 사용자에게 돌아가므로 안정성이 담보되어야 한다.
    - 사용자와 응용 프로그램의 안전 문제와 하드웨어적인 보안 문제를 처리할 수 있어야 하고, 시스템 복구를 위한 결함 포용 능력을 수행해야 한다.

    3. 확장성 (For 하드웨어 인터페이스 제공)
    - 운영체제는 다양한 시스템 자원을 추가하거나 제거하기 편리해야 한다.
    - 하드웨어 종류와 상관없이 꽃으면 바로 실행할 수 있는 '플러그 앤드 플레이' 기능을 제공해야 한다.

    4. 편리성 (For 사용자 인터페이스 제공)
    - 사용자가 편리하게 작업할 수 있는 환경을 제공하는 것이 중요하다.
    - 응용 프로그램과 사용자에게 다양한 편리성을 제공하면서도 자원의 낭비 요소를 막아야 한다.
운영체제의 구조
  •  커널과 인터페이스
    커널 : 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아 놓은 것(= 엔진) 운영체제의 성능을 좌우함.

  • 운영체제는 크게 인터페이스와 커널로 나눌 수 있다.

    인터페이스 : 사용자와 응용 프로그램에 인접하여 커널에 명령을 전달, 실행 결과를 사용자와 응용 프로그램에 돌려줌
    EX. 유닉스의 셸(Shell)

    커널 : 운영체제의 핵심 기능을 모아놓음.

  • 시스템 호출과 디바이스 드라이버
    시스템 호출 : 커널이 자신을 보호하기 위해 만든 인터페이스. (+컴퓨터 자원)
    커널은 사용자나 응용 프로그램으로 부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단한다. 응용 프로그램이 이때 자원을 이용하기 위해 접근할 수 있도록 인터페이스가 시스템 호출이다.

    - 커널이 제공하는 시스템 관련 서비스가 모아져 있으며 이를 함수 형태로 제공한다.
    EX. printf() 함수

    - 사용자가 자발적으로 커널 영역에 진입할 수 있는 유일한 수단이다.

    드라이버 : 응용 프로그램과 커널의 인터페이스가 시스템 호출이라면 커널과 하드웨어의 인터페이스는 드라이버가 담당한다.

    커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행되도록 한다. 하드웨어 제작자가 만든 소프트웨어를 디바이스 드라이버라고 부른다.

    복잡하지 않은 디바이스 드라이버는 커널에 포함되어 있어 컴퓨터에 꽂기만 하면 작동되지만 그래픽카드, 프린터와 같이 크기가 크고 복잡한 디바이스 드라이버는 사용자가 직접 설치해야 한다.

    시스템 호출 부분을 보면 커널 앞부분 전체를 감싸고 있는데, 이는 시스템 호출을 거치지 않고 커널에 진입할 수 없다는 의미이다.

    반면 드라이버는 커널 전체를 감싸고 있지 않다. 이는 커널이 제공하는 드라이버도 있고 하드웨어 제작자가 제공하는 드라이버도 있다는 뜻으로, 하드웨어는 커널과 직접 연결되기도 하고 하드웨어 제작자가 제공하는 드라이버를 통해 연결되기도 한다.

  • 커널의 구성
    커널이 주로 하는 일은 총 5가지 이다.

    1. 프로세스 관리 : 프로세스에 CPU를 배분하고 작업에 필요한 제반 환경을 제공한다.

    2. 메모리 관리 : 프로세스에 작업 공간을 배치하고 실제 메모리보다 큰 가상공간을 제공한다.

    3. 파일 시스템 관리 : 데이터를 저장하고 접근할 수 있는 인터페이스를 제공한다.

    4. 입출력 관리 : 필요한 입력과 출력 서비스를 제공한다.

    5. 프로세스 간 통신 관리 : 공동 작업을 위한 각 프로세스 간 통신 환경을 지원한다.

    이러한 커널은 핵심 기능을 어떻게 구현하는가에 따라 구조가 달라진다.
    단일형 구조 커널, 계층형 구조 커널, 마이크로 구조 커널로 구분된다.


    ▶ 단일형 구조 커널
     
    특징
      - 초창기 운영체제 구조로, 커널의 핵심 기능을 구현하는 모듈들이 구분 없이 하나로 구성되어 있다.

     - 대표적인 운영체제는 MS-DOS, VMS, 초기의 유닉스 운영체제이다.

     - 초기에 운영체제를 만들 때 기능을 모듈화 해서 구현할 여력이 없었기 때문에 이런 구조가 탄생했다.

     - 프로그램에 비유하자면 함수를 거의 사용하지 않고 main() 함수에 모든 기능을 구현해 놓은 것과 같다.

    장점
     - 모듈이 거의 분리되지 않았기 때문에 모듈 간 통신 비용이 줄어 효율적인 운영이 가능하다. 앞서 살펴본 특징에서 main() 함수에 모든 기능을 구현해 놓은 것과 같다고 비유했는데, 이때 함수를 호출하는 오버헤드()가 없어서 프로그램이 빨라지는 것과 같은 이치로 통신 비용이 줄어든다. 

    오버헤드 : 프로그램의 실행 흐름에서 동떨어진 함수를 호출할 때 추가적인 시간, 메모리, 자원이 사용되는 현상

    단점
     - 모든 모듈이 하나로 묶여 있기 때문에 버그나 오류 처리가 어렵다.
     - 운영체제의 여러 기능이 연결되어 있어 상호 의존성이 높기 때문에 기능상의 작은 결함이 시스템 전체로 확산될 수 있다.
     - 단일형 구조는 수정이 어렵기 때문에 이식성이 낮아 다양한 환경의 시스템에 적용하기 어렵다.
     - 현대 운영체제는 매우 크고 복잡하기 때문에 완전 단일형 구조의 운영체제를 구현하기 어렵다.


    ▶ 계층형 구조 커널

    특징
     - 단일형 구조 커널이 발전된 형태로, 비슷한 기능을 가진 모듈을 묶어 하나의 계층으로 만들고 계층 간 통신을 통해 운영체제를 구현하는 방식이다.

     - 윈도우를 비롯해 오늘날 운영체제 대부분이 이 구조로 구성된다.

    장점
     - 비슷한 기능을 모아 모듈화 했기 때문에 단일형 구조보다 버그나 오류를 쉽게 처리할 수 있다.

     - 오류가 발생했을 때 전체 커널을 고치는 것이 아니라 해당 계층만 따로 수정하면 되기 때문에 디버깅하기 쉽다.


    ▶ 마이크로 구조 터널

    특징
     - 계층형 구조 커널을 사용한 운영체제가 발전함에 따라 커널 소스가 방대해져 오류를 잡기 어려워지는 문제를 해결하기 위해 기존 계층형 구조의 접근 방식과 반대로 개발된 커널이다.

     - 프로세스 관리, 메모리 관리, 프로세스 간 통신 관리 등 가장 기본적인 기능만 제공한다.

     - 다른 커널에 비해 운영체제의 많은 부분이 사용자 영역에 구현되어 있다.

    장점
     - 각 모듈이 독립적으로 작동하기 때문에 하나의 모듈이 실패해도 전체 운영체제가 멈추지 않는다.
     - 많은 컴퓨터에 이식하기 쉽고 커널이 가벼워 CPU 용량이 작은 시스템에도 적용이 가능하다.


  • 가상머신
    배경
    - C언어는 유닉스와 다른 커널을 가진 윈도우 등의 운영체제에서 소스코드가 잘 작동하지 않는 호환성 문제가 있었다.

    - 이 호환성 문제를 해결한 언어가 자바이다. 자바는 운영 체제 위에 가상머신이라는 것을 만들고 그 위에서 응용 프로그램이 작동하기 때문에 대부분의 운영체제에서 작동한다.

    개념
    - 가상머신이란 운영체제와 응용 프로그램 사이에서 작동하는 프로그램을 말한다.
    - 가상머신을 설치하면 응용 프로그램이 모두 동일한 환경에서 작동하는 것 처럼 보이기 때문에 개발자가 하나의 코드를 만들면 그 코드를 여러 운영체제에서 똑같이 실행할 수 있어 다양한 곳에서 사용된다.

    장점
    - 호환성이 높아진다.

    단점
    - 응용 프로그램이 가상머신을 통해서만 작동하기 때문에 느려진다.
작성일
2024. 6. 6. 22:48
작성자
risehyun
  • 문제

 

  • 풀이
#include <iostream>
using namespace std;

int main()
{

	// a => 낮에 올라가는 높이
	// b => 밤에 미끄러지는 높이
	// v => 목표 높이

	// (a - b) => 달팽이가 하루에 올라갈 수 있는 높이
	// 그러나 낮에 달팽이가 올라갈 수 있는 높이 a가
	// 남은 목표높이보다 크다면? 밤에 내려가지 않고 바로 도착가능

	// 따라서 (a - v)한 값을 (a-b)로 나눈 높이 묶음 만큼 채워주면
	// 달팽이가 마지막으로 올라가는 날 이전의 날짜가 총 며칠인지가 나온다.

	int a, b, v;

	cin >> a >> b >> v;

	// 만약 애초에 입력받은 값에서
	// a가 목표하는 높이인 v보다 큰 경우
	// 아침에 하루만 올라가면 바로 종점에 도달하기 때문에
	// 필요 날짜 수는 1로 고정된다.
	if (a >= v)
	{
		cout << "1";
		return 0;
	}
	else
	{
		int day = 1;

		day += (v - a) / (a - b);

		// 만약 달팽이가 올라갈 값이 딱 맞아떨어지지 않는다면
		// 다음날 아침에 한번만 더 가면 끝나기 때문에
		// day를 + 1 해서 총 정상에 도달하는 날짜를 확정한다.
		if ((v - a) % (a - b) != 0)
		{
			day++;
		}

		cout << day;
	}

	return 0;

}
작성일
2024. 6. 6. 12:53
작성자
risehyun
  • 문제

 

  • 풀이
#include <iostream>

using namespace std;

int main()
{
	// 초기값
	int n = 0;

	cin >> n;

	// 분해합은 초기에 받은 n보다 큰 수가 된다. 
	// 따라서 n까지 반복문을 돌려서 n보다 작은 모든 수의 분해합을 탐색한다.
	for (int i = 1; i <= n; i++)
	{
		
		// 각 자리수를 만들기 위해 test 변수에 값을 할당한다.
		int test = i; // m
		int sum = i;

		// 값이 남아있는 동안 계속 반복해서 아래 연산을 통해 분해합을 구한다.
		while ((test / 10) != 0)
		{
			// 현재 자릿수의 값을 구하기 위해 %와 /을 사용한다.
			sum += (test % 10);
			
			// 앞에 있던 숫자가 뒤로 하나씩 당겨져 오도록 자릿수를 조정한다.
			test /= 10;
		}

		// 자릿수가 10미만인 경우 while문을 탈출하여 += 연산이 수행되지
		// 않는 경우에 대한 예외처리로, 가장 큰 자릿수의 결과를 더해준다.
		sum += test;

		// 도출해낸 sum의 값이 기존 값과 같다면
		// 생성자가 맞는 경우이므로 이 생성자를 출력해준다.
		if (sum == n)
		{
			cout << i;

			return 0;
		}
	}

	cout << 0;
}

 

  • 메모
    이 문제는 완전탐색 알고리즘인 브루트 포스에 속하는 문제다.
    완전탐색 알고리즘은 가능한 모든 경우의 수를 모두 탐색하며 요구조건에 충족되는 결과만을 찾아낸다.
    선형 구조에서의 순차 탐색, 비선형 구조에서의 DFS, BFS가 기본적으로 사용된다.

    또한 이 문제는 각 자릿수끼리의 값을 분해한 값을 구해 문제 풀이에 사용하는 문제이기도 하다.
    아래의 코드가 바로 자릿수를 구하는 코드 == k진수를 맨 끝자리부터 구해나가는 코드이다.
		// 값이 남아있는 동안 계속 반복해서 아래 연산을 통해 각 자릿수를 구한다.
		while ((test / 10) != 0)
		{
			// 현재 자릿수의 값을 구하기 위해 % 연산을 이용해 나머지 값을 구한다.
			sum += (test % 10);
			
			// 앞에 있던 숫자가 뒤로 하나씩 당겨져 오도록 자릿수를 조정한다.
			test /= 10;
		}
작성일
2024. 6. 3. 20:43
작성자
risehyun