본문 바로가기

전체 글

(90)
🌐 HTTP Status Code, 301 vs 302 301과 302의 차이점 웹 개발을 하다보면 페이지 리다이렉트를 할 일이 생기는데 그 때마다 항상 찾아보는 코드이다. (어떻게 볼 때마다 까먹는지 지금은 기억함.. ㅎ) 301 (Permanent redirect) 페이지가 영구적으로 이동했다는 의미를 갖고있습니다. foo.com에서 bar.com으로 이동했다면 검색엔진은 영구적으로 페이지가 변경되었다 판단하고 검색 결과를 bar.com으로 표기합니다. 주로 도메인 이전으로 foo.com에서 bar.com으로 변경되거나 www.bar.com으로 접속했을 때 bar.com으로 리다이렉트 되는 경우에 쓰입니다. 302 (Temporary redirect) 페이지가 임시적으로 이동했다는 의미를 갖고있습니다. 301 코드와 달리 foo.com`에서 bar.com..
백준 #8979 올림픽 올림픽은 참가에 의의가 있기에 공식적으로는 국가간 순위를 정하지 않는다. 그러나, 많은 사람들이 자신의 국가가 얼마나 잘 하는지에 관심이 많기 때문에 비공식적으로는 국가간 순위를 정하고 있다. 두 나라가 각각 얻은 금, 은, 동메달 수가 주어지면, 보통 다음 규칙을 따라 어느 나라가 더 잘했는지 결정한다. 금메달 수가 더 많은 나라 금메달 수가 같으면, 은메달 수가 더 많은 나라 금, 은메달 수가 모두 같으면, 동메달 수가 더 많은 나라 각 국가는 1부터 N 사이의 정수로 표현된다. 한 국가의 등수는 (자신보다 더 잘한 나라 수) + 1로 정의된다. 만약 두 나라가 금, 은, 동메달 수가 모두 같다면 두 나라의 등수는 같다. 예를 들어, 1번 국가가 금메달 1개, 은메달 1개를 얻었고, 2번 국가와 3번..
백준 #2688 줄어들지 않아 어떤 숫자가 줄어들지 않는다는 것은 그 숫자의 각 자리 수보다 그 왼쪽 자리 수가 작거나 같을 때 이다. 예를 들어, 1234는 줄어들지 않는다. 줄어들지 않는 4자리 수를 예를 들어 보면 0011, 1111, 1112, 1122, 2223이 있다. 줄어들지 않는 4자리수는 총 715개가 있다. 이 문제에서는 숫자의 앞에 0(leading zero)이 있어도 된다. 0000, 0001, 0002는 올바른 줄어들지 않는 4자리수이다. n이 주어졌을 때, 줄어들지 않는 n자리 수의 개수를 구하는 프로그램을 작성하시오. https://www.acmicpc.net/problem/2688 DP문제입니다! 문제를 풀면서 알았는데 문제의 특징을 뽑아 점화식을 설계하면 편리한거 같습니다. 자릿수 n이 주어지고 줄어들지..
Rust toolchain 설치 시 액세스 거부 해결하기 Rust toolchain 설치 시 아래와 같은 오류가 발생하곤 합니다. error: could not rename component file from '경로\rust-docs\share/doc/rust/html' to '경로\share/doc/rust/html' info: caused by: 액세스가 거부되었습니다. (os error 5) 관리자 권한으로도 실행 해보고 직접 파일 이름을 바꾸기도(??) 해봤는데 아쉽게도 이 방법은 아니였고 백신 사용 시 백신을 모두 끄고 설치하시면 해결됩니다.
코틀린 Kotlin 다루기 (7) - 조건식 조건식 조건식은 조건에 따라 코드 실행을 하기 위한 문법입니다. Java, C 등 다른 언어와 매우 흡사하며 다른 언어에서 써본 적이 있다면 쉽게 다룰 수 있습니다. 숫자를 입력 받으면 짝수, 홀수에 따라 다른 코드를 실행하거나 특정 퀘스트를 완료하면 작동하는 코드 등 모두 조건식으로 해결 할 수 있습니다. If if는 조건을 확인 할 수 있는 기초적인 문법입니다. val a = 6 val b = 5 if(a > b) { println("변수 a가 변수 b보다 큽니다.") } a와 b를 비교하여 a가 b보다 큰 경우(a > b) 문구를 출력하는 코드입니다. if 괄호 안에 조건을 쓸 수 있으며 해당 조건 만족 시 중괄호( {} ) 안에 포함된 코드가 작동됩니다. 이번에는 입출력까지 응용하여 입력받은 수가..
2019년 회고 시작하기 앞서, 작년에 올해에는 PS 분야를 열심히 파보자는 다짐을 했었다. 미리 스포 하자면 어느 정도 열심히 했다고 생각한다! 끝말잇기 웹게임, 쿵따 오픈소스 웹게임인 `끄투`를 리메이크하는 프로젝트이다. TypeScript, React를 이용하여 다시 만들기로 했었고 처음에는 프로젝트 이름을 KKuTuReact로 했었다. 추후 지인 추천으로 쿵따라는 이름으로 바꿨다. 아직까지는 디자인, 리소스가 원작을 따라 하고 있다. 개발도 지금은 멈춰있다. 디자인도 새롭게 바꾸고 다시 개발도 잡아봐야 될 거 같다! (다시 잡으면 제일 먼저 리팩토링부터 할 듯... ㅎ) GitHub 저장소는 이곳으로! -> https://github.com/kkutureact/Kungtta 교내 시험대비 CBT 프로젝트 특성화고..
최대공약수와 최소공배수 최대공약수 최대공약수를 구하는 알고리즘으로 유명한 유클리드 호제법이 있습니다. "두 개의 자연수 a, b에서 a를 b로 나눈 나머지 r이 있을 때, a와 b의 최대공약수는 b와 r의 최대공약수와 같다." 이 원리를 이용하여 a, b가 있을 때 b MOD r를 구하고 이를 r'라고 하면, r MOD r'를 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수입니다. (gcd) 그대로 코드로 표현해보면 int gcd(int a, int b) { int r; while(b) { r = a % b; a = b; b = r; } return a; } 단, a > b는 이어야하기 때문에 b > a라면 두 숫자를 바꿔주는 과정이 필요합니다. int gcd(int a, int b) { if(b > a) ..
Kotlin으로 만든 디스코드 봇 Jenkins 적용기 학교 급식, 시간표를 빠르게 보기 위한 용도로 제작된 디스코드 봇이 있습니다. 해당 디스코드 봇은 Kotlin에 JDA 라이브러리를 이용했는데 번거롭고 귀찮던 배포 과정을 Jenkins로 간단하게 줄이면서 있었던 일들을 써볼까 합니다. 불편했던 기존 과정 기존 과정은 정직한 방법(?)이었습니다. 1. Gradle로 빌드 & .jar 패키징 2. 서버에 FTP로 .jar 파일 전송 3. SSH 접속 후 Docker image build 4. Docker 컨테이너 재시작 간단하면서도 복잡하게 보였던 이 과정을 봇을 업데이트할 때마다 하자니 번거롭습니다. 마침 Jenkins로 배워봐야겠다 싶어 이 과정을 Jenkins로 자동화해보았습니다. Jenkins를 써보자! (아래 과정은 GitHub 계정 등록, Gra..
교내 문제풀이 사이트 개발기 자격증 시험을 보거나 연습하기 위해 CBT(컴퓨터로 문제 푸는 거) 문제풀이 방식을 사용합니다. 학교 시험공부를 CBT로 하면 어떨까라는 생각으로 시작하였습니다. (만들어놓고 거의 안씀) (아마 시험 2주전인가 1주 전에 제작했던 걸로 기억) 소프트웨어와 관련된 학교이고 반이기 때문에 "소프트" 유사 단어인(???) "수프트"로 프로젝트 이름을 결정하였습니다. 늘 만들던 데로 Front-End는 TypeScript, React로 Back-End는 TypeScript, NodeJS로 결정했습니다. 초기 계획은 관리자가 과목별로 문제를 작성하고 일부 문제는 랜덤으로 출제되는 방식입니다. 학교에서 배우는 것중 제일 간단하고 기초적인 문제는 '2진수를 10진수로 변환하기'와 같은 진수 변환입니다. 랜덤 한 숫자..
코틀린 Kotlin 다루기 (6) - 배열 (Array) 배열 (Array) 이번 편에서는 자료를 저장하는 방법 중 하나인 배열을 알아보려고 합니다. 이해를 돕기 위해 배열이 어떤 것이고 어디에 쓰이는지 짚고 넘어가겠습니다. 배열은 같은 자료형의 데이터들을 담을 수 있는 방법입니다. 데이터의 순번, 순차를 나타네는 인덱스(index)와 데이터로 나뉘어있으며 index는 0부터 시작합니다. 이렇게 자료를 저장하고 관리하는 방법을 자료 구조라고 하며 배열을 자료 구조 중 하나입니다. 상황을 가정해봅시다. 멀티 게임을 하기 위해 방장을 방을 만들었고, 다른 플레이어는 방에 입장하려고 합니다. 방장이 만든 방에 입장한 플레이어를 기록해야 합니다. 변수를 이용해보면 플레이어가 들어올 때마다 변수를 만듭니다. 플레이어가 100명이면 변수 100개가 만들어지고 들어올 때마..
코틀린 Kotlin 다루기 (5-1) - 표준 입출력 (Standard Input/Output) 표준 입출력 (Standard Input/Output) 오랜만입니다! 이번 편에서는 저번 편에서 배운 함수에서 나아가 표준 입출력에 쓰이는 함수들을 알아보겠습니다. 표준 입출력 (Standard Input/Output) 지금까지 강좌를 보면 print() 함수를 통해 모니터에 글자를 출력해주었습니다. 이 처럼 모니터를 통해 출력하고 키보드를 통해 입력받는 것을 표준 입출력이라고 합니다. 나아가 오류 메세지를 출력하는 표준 오류도 존재합니다. 출력하기 (Standard Output, stdout) 표준 출력에 관련된 함수를 알아보겠습니다. 줄바꿈이 없는가 있는가에 따라 print()와 println()으로 나뉩니다. fun main() { print("줄바꿈이 없습니다.") print("줄바꿈이 없습니다...
코틀린 Kotlin 다루기 (5) - 함수 (Function) 함수 (Function) 이번 편에서는 함수에 관하여 다뤄보려고 합니다. 이전 강좌부터 쓰였던 print() 같은 코드를 함수라고 합니다. 함수 하고 비슷한 용어인 메소드(Method)가 있는데, 함수의 경우 독립적인 실행을 메소드의 경우 클래스 등 안에 종속된 경우에 쓰입니다. (클래스는 나중에 다뤄보겠습니다.) 이번 강좌에서는 함수라는 용어로 통일해서 사용하겠습니다. 먼저 Function.kt를 만들어주겠습니다. 함수의 형태 기본적인 함수의 형태는 아래와 같습니다. fun 이름(): 반환타입 { // 코드 } 만약 number()이라는 함수를 사용했을 때 정수 10을 반환(return)하고 싶다면, fun number(): Int { return 10 } 이렇게 쓰고 number() 이와 같이 사용할..
코틀린 Kotlin 다루기 (4) - 연산자 (Operators) 연산자(Operators) 연산자를 이번 편에서 배우지만 이전 강좌에서 연산자를 써본 적이 있습니다. 연산자는 대입, 산술, 논리, 비트 연산자 등이 있습니다. 이와 함께 어떤 연산자가 먼저 계산되는지에 관한 우선순위에 대해 알아봅시다. 연산자 소개 순서는 제가 임의로 작성하였습니다. 우선순위는 아래에서 최종적으로 다루겠습니다. 시작하기 앞서 Operators.kt 파일을 만들고 여기서 진행해봅시다. 산술 연산자 (+, -, *, /, %) 산술 연산자는 덧셈, 뺄셈, 나눗셈, 곱셈 그리고 나머지 연산(MOD)을 수행하는 연산자입니다. 간단한 예시를 보고 넘어가겠습니다. fun main() { val a = 1+2 val b = 1-2 val c = 1*2 val d = 1/2 val e = 1%2 pr..
코틀린 Kotlin 다루기 (3) - Nullable, Non-Null Nullable, Non-Null 저번 시간에서는 자료형에 대해 알아보았습니다. 자료형에는 빈 값이 들어갈 수가 있으며 이를 null이라고 칭합니다. Java에서는 null이 들어가면서 발생하는 오류(예외)를 NullPointerException이라고 합니다. 반면 Kotlin에서는 따로 정해진 null 예외처리가 없으며 기본적으로 변수에는 null 값이 들어갈 수 없습니다. Nullable 그럼 Kotlin에서 변수에 Null 값을 넣으려면 어떤 방법을 써야 하는지 알아봅시다. 시작하기 앞써 NullSafety 이름을 가진 Kotlin 파일을 만들어주고 진행하겠습니다. fun main() { var text: String = "문자열" text = null } 지난 시간에 잠깐 나온 String 자료형..
코틀린 Kotlin 다루기 (2) - 변수 (Variable), 자료형 (Data type) 변수(Variable), 자료형 (Data type) 이번 글에서는 Kotlin의 자료형에 관하여 다루고 이를 Java 하고 간단하게 비교해보려고 합니다. 그전에 변수에 대해서 알아야 될 필요가 있습니다. 변수는 프로그래밍을 하면서 문자, 숫자 등 정보를 저장하는 공간을 뜻합니다. 게임으로 예를 들자면 유저의 닉네임이 변수에 담길 수도 있고 레벨, 능력치 등이 담길 수 있습니다. Kotlin에서 변수 선언하기 변수를 Kotlin에서 사용해봅시다. 먼저 저번 글에서 만들었던 프로젝트에서 코드를 작성하기 위해 파일을 만들어줘야 합니다. Kotlin은 확장자 .kt를 가진 파일 안에서 코드를 작성하며 이 코드는 Package(패키지)라는 개념으로 묶입니다. kr └ skylightqp └└ learning └..

반응형