everyday-develop-myself의 등록된 링크

키자드에 등록된 총 244개의 포스트를 확인하실 수 있습니다.

Tistory

변수 캡슐화하기 (Encapsulate Variable)

변수 캡슐화란? 변수 캡슐화는 객체 지향 프로그래밍에서 중요한 원칙 중 하나이다. 이는 클래스의 맴버 변수를 외부에서 직접 접근하는 것이 아니라, 해당 변수에 대한 접근을 제한하고 메서드를 통해 간접적으로 변수에 접근하는 것을 말한다. 변수 캡슐화를 하면 다음과 같은 이점이 생긴다. 정보 은닉: 변수를 private로 선언할 수 있어 클래스 내부의 데이터를 보호하고, 외부에 불필요한 세부 구현을 감춘다. 접근 제어: getter와 setter 메서드를 통해 변수에 접근하므로, 변수에 대한 유효성 검사, 제한된 접근 권한 설정 등을 수행할 수 있다. 유연성과 유지보수성: 변수에 대한 의존성을 제한하여 클래스 내부의 구현 변경에 유연하기 대처할 수 있으며, 코드의 유지보수성을 향상시킨다. 설명만 듣고선 알기..

Tistory

1149번: RGB 거리 - Kotlin

1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색..

Tistory

1932번: 정수 삼각형 - Kotlin

1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다. 삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다. 입력 첫째 줄에 삼각형의 크기..

Tistory

15686번 치킨 배달 (DFS)- Kotlin

15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 문제 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. ..

Tistory

1759번: 암호 만들기 - Kotlin (DFS)

1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 문제 바로 어제 최백준 조교가 방 열쇠를 주머니에 넣은 채 깜빡하고 서울로 가 버리는 황당한 상황에 직면한 조교들은, 702호에 새로운 보안 시스템을 설치하기로 하였다. 이 보안 시스템은 열쇠가 아닌 암호로 동작하게 되어 있는 시스템이다. 암호는 서로 다른 L개의 알파벳 소문자들로 구성되며 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 구성되어 있다고 알려져 있다. 또한 정렬된 문자열을 선호하는 조교들의 성향으로 미루어 보아 암호를 이루는 알..

Tistory

Factory Pattern(팩토리 패턴) by Kotlin

팩토리 패턴이란? 팩토리 패턴(Factory Pattern)은 객체를 생성할 때 사용되는 디자인 패턴이다. 이 패턴은 객체 생성을 캡슐화하고, 클라이언트 코드와 객체 생성 코드를 분리함으로써 유연성과 확장성을 제공한다. 일반적으로 팩토리 패턴은 추상화된 인터페이스를 정의하고, 이를 구현하는 여러개의 팩토리 클래스를 만들어 사용한다. 클라이언트는 팩토리 인터페이스를 통해 객체를 생성하고 반환받을 수 있다. 팩토리 클래스는 객체 생성에 대한 로직을 구현하고, 실제 객체의 인스턴스를 생성하여 반환한다. 간단하게 말하자만 객체를 생성하는 부분을 Sub Class에 맡긴다고 생각하면 된다. 팩토리 패턴은 다음과 같은 장점이 있다. 객체의 생성을 중앙집중화해 코드의 유지보수성과 확장성을 향상시킨다. 구체적인 구현클..

Tistory

1-1. Linear Regression

머신러닝에 대해서는 아래의 유튜브를 통해 학습하였다. Linear Regression (선형 회귀) 선형 회귀는 통계학과 머신 러닝에서 가장 기본적이고 널리 사용되는 예측 모델 중 하나로, 입력 변수와 출력 변수 간의 선형 관계를 모델링하려는 것이다. 간단히 말해, 선형 회귀는 주어진 입력 변수에 대해 출력 변수를 예측하는 작업을 수행한다. 입력 변수는 종종 '독립 변수' 또는 '특성' 이라고도 불리며, 출력 변수는 '종속 변수' 라고도 불린다. 선형 회귀는 입력 변수와 출력 변수 사이의 선형적인 관계를 가정하고, 이 관계를 통해 새로운 입력 값에 대한 출력 값을 예측하는 것이 목표이다. 선형 회귀는 기본적으로 선형 방정식을 통해 모델을 구성한다. 간단한 경우를 살펴보자. 하나의 입력변수(x)와 하나의 ..

Tistory

1-2. 데이터 세트 분리

머신러닝에 대해서는 아래의 유튜브를 통해 학습하였다. 데이터 세트 분리 데이터 세트 분리는 머신 러닝 모델을 학습, 검증 및 테스트하기 위해 사용되는 데이터를 적절하기 나누는 과정이다. 일반적으로 우리가 가지고 이는 데이터를 훈련 세트와, 테스트 세트로 분류를 하게 된다. 전체 데이터의 80에 해당하는 만큼을 가지고 머신 러닝 모델을 훈련시킨 다음, 나머지 20에 해당하는 테스트 세트로 모델이 잘 동작하는가 평가를 하게 된다. 데이터 세트 분리의 목적은 모델이 학습 데이터에 과적합 되지 않고 새로운 데이터에 대해 일반화할 수 있는 능력을 갖추도록 하는 것이다. 학습 세트를 사용하여 모델을 학습시키고 검증 세트를 사용하여 모델의 성능을 조정하며, 테스트 세트를 사용하여 최종적인 성능을 평가한다. 데이터 세..

Tistory

1-3. Gradient Descent (경사 하강법)

머신러닝에 대해서는 아래의 유튜브를 통해 학습하였다. Gradient Descent (경사 하강법) 경사 하강법은 머신 러닝과 최적화 알고리즘에서 매개변수를 조정하여 함수의 최솟값을 찾는 기법이다. 주어진 함수의 기울기를 활용하여 최적의 매개변수 값을 찾아가는 방법이다. 경사 하강법은 일반적으로 손실 함수를 최소화하는데 사용된다. 손실 함수는 모델의 예측값과 실제값 사이의 차이를 나타내는 함수로, 모델의 성능을 평가하는 지표이다. 경사 하강법은 손실 함수의 기울기를 따라 가장 빠르게 감소하는 방향으로 매개변수를 업데이트하여 최적의 매개변수 값을 찾아낸다. 경사 하강법에서 매개변수는 일반적으로 2가지가 있다. - 학습률 (learing rate): 평가 하는 데이터의 보폭, 일반적으로 (0.001, 0.0..

Tistory

REST API에서 HATEOAS란?

HATEOAS란? HATEOAS(Hypermedia as th engine of application state)는 클라이언트가 API에서 제공되는 자원 간 관계를 탐색하고 이를 통해 애플리케이션 상태를 변경할 수 있는 기능을 제공한다. 만약 REST API에서 HATEOAS를 적용하지 않은 응답 예시를 들어보면, 클라이언트가 서버에스 응답받은 리소스의 URI를 기반으로 클라이언트가 가능한 동작을 수행하기 어렵다는 것이다. 이를 예를 들어 설명해 보겠다. 다음과 같은 REST API가 있다고 가정해 보겠다. GET /users/1 위의 API를 호출하면 서버는 클라이언트에게 원하는 유저의 정보를 반환할 수 있다. 그 응답은 아래와 같다. { "id": 1, "name": "John Smith", "em..

Tistory

REST API, Retrofit

요즘 들어 개인 프로젝트를 진행한다고 블로그를 작성하는 것에 소홀했었다. 안드로이드 개발을 한다고 하면 반드시 마주치게 되는 것이 바로 REST API와 Retrofit이다. 안드로이드 스튜디오 자체에서 다 해결할 수 있다면 사용하지 않을 수 도 있겠지만 앵간하면 분명 위의 2가지와 마주치게 될 것이다. 좋은 개발자가 되기 위해서는 관련 개념에 대한 깊은 이해가 필요하기에 이 게시글을 통해 이해를 하고 넘어가고자 한다. REST API REST API는 REpresentational State Transfer API의 약자로 HTTP 프로토콜을 사용해서 클라이언트와 서버 간 통신을 위한 아키텍처를 정의하는 웹 서비스 디자인 패턴이다. HTTP & HTTPS HTTP(HyperText Transfer Pr..

Tistory

Machine Learning의 분류

안드로이드 개발자를 목표로 하고 있는 사람으로서 머신러닝을 공부하지 않는다는 것은 한계가 분명 명확할 것이라고 생각한다. 머신러닝을 완벽하게는 아니더라도 어떤게 있고 나중에 프로젝트를 진행할 때, 어떤 방식으로 머신러닝을 진행하야 하는지, 학습방식은 어떤 방식이 있는지에 대해 미리 알고 있는것은 나중에 나에게 그런 일이 주어졌을 때에 큰 힘이 될 것이다. 그래서 이제부터 머신러닝은 어떤것이고, 어떤 학습방식이 있는지에 대해서 알아보려고 한다. 머신러닝에 대해서는 아래의 유튜브를 통해 학습하였다. 머신러닝이란? 머신러닝은 컴퓨터 시스템이 데이터로부터 학습하고 패턴을 식별하며 예측하는 방법이다. 기본적으로, 머신러닝은 명시적인 프로그래밍 없이 데이터를 분석하여 패턴과 통찰력을 발견하고 이를 기반으로 결정을 ..

Tistory

1912번: 연속합 - Kotlin

1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다. 입력 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1..

Tistory

Singleton Pattern(싱글턴 패턴) by Java, Kotlin

싱글턴 패턴이란? 싱글턴 패턴은 객체지향 프로그래밍에서 사용되는 디자인 패턴 중 하나로, 애플리케이션에서 특정 클래스의 인스턴스가 단 하나만 생성되도록 보장하는 패턴이다. 즉, 해당 클래스의 인스턴스가 오직 하나뿐이며, 어디서든지 그 인스턴스에 접근하여 사용할 수 있도록 만들어 준다. 싱글턴 패턴을 사용하는 이유는 다음과 같다. 자원 공유: 여러 객체에서 하나의 인스턴스를 공유하여 사용할 수 있다. 이를 통해 자원을 효율적으로 사용할 수 있다. 객체의 생성 비용 최소화: 인스턴스가 한 번 생성된 이후에는 다시 생성하지 않기 때문에, 객체 생성 비용이 큰 경우에 사용하면 효율적이다. 인스턴스의 수 제한: 클래스의 인스턴스가 하나뿐이기 때문에, 불필요한 인스턴스 생성을 방지할 수 있다. 싱글톤 패턴을 구현하..

Tistory

Adapter Pattern(어댑터 패턴) by Java, Kotlin

어댑터 패턴이란? 어댑터 패턴(Adapter pattern)은 소프트웨어 공학에서 사용되는 디자인 패턴 중 하나로, 기존의 클래스를 새로운 인터페이스에 맞게 변환하여 재사용할 수 있도록 해주는 패턴이다. 어떤 클래스나 객체를 다른 클래스나 객체에서 사용하려면, 그것들이 호환되는 인터페이스를 가져야 한다. 하지만 기존에 존재하는 클래스나 객체가 원하는 인터페이스를 갖추고 있지 않을 경우에는, 새로운 클래스나 객체를 만들거나, 기존 클래스나 객체를 수정해야 하는 경우가 있다. 이때 어댑터 패턴을 사용하면, 기존 클래스나 객체를 수정하지 않고도 새로운 인터페이스를 제공할 수 있다. 어댑터 패턴은 크게 두 가지 종류가 있다. 클래스 어댑터 패턴과 객체 어댑터 패턴이다. 클래스 어댑터 패턴은 기존 클래스를 상속받..

Tistory

[Android Studio] 네이버 SENS로 SMS 인증 기능 Retrofit 구현하기 with kotlin (2)

Retrofit Interface 작성 이제부터는 API를 사용하기 위한 Retrofit Interface를 작성하겠다. Retrofit에 대한 이해가 없다면 Retrofit에 대해 공부를 하고 다시 돌아오는 것이 좋을 수 있다. 당장 따라서 구현하는 것은 할 수 있겠지만 앞으로 수도없이 사용할 것이기에 Retrofit에 대해 완벽하게 이해를 하는 것이 좋다. SMS API api.ncloud-docs.com API 통신을 하기 위해서는 위의 문서를 반드시 참고하여야 한다. Retrofit와 Rest API에 대한 지식이 충분하다면 위의 문서만으로도 충분히 구현할 수 있다. Retrofit을 사용하기 위해서는 가장 먼저 인터페이스를 통해 API 요청을 정의해야 한다. HTTP 메서드(GET, POST, ..

Tistory

TCP / IP 계층에서 데이터 전달에 따른 프로토콜 동작

TCP / IP 란? TCP / IP는 인터넷에서 데이터 통신을 위해 사용되는 프로토콜이며, 인터넷의 핵심 프로토콜로서 전 세계적으로 사용되고 있다. TCP/IP는 Transmission Control Protocol (TCP)와 Internet Protocol (IP) 두 개의 프로토콜로 구성되어 있다. TCP는 연결 지향적인 프로토콜로서, 안정적인 데이터 전송을 보장한다. 데이터를 전송하기 전에 먼저 연결을 설정하고, 데이터 전송이 완료된 후에는 연결을 종료한다. 이를 통해 데이터 손실을 최소화하고, 중복 전송을 방지하여 안정적인 데이터 전송을 보장한다. TCP / IP는 다음과 같은 계층적인 구조로 이루어져 있다. Application Layer(애플리케이션 계층): 응용 프로그램에서 사용하는 프로..

Tistory

Retrofit 이란?

Retrofit 이란? Retrofit은 Square에서 개발한 안드로이드 및 Java용 HTTP 클라이언트 라이브러리이다. RESTful API와 통신하기 위해 사용된다. Retrofit은 OkHttp 라이브러리와 함께 작동하여 간편하게 HTTP 요청을 만들고 응답을 처리할 수 있다. Retrofit은 간단하게 인터페이스를 정의하고, 이를 기반으로 HTTP 요청 및 응답 처리를 자동으로 생성할 수 있다. Retrofit Annotation (어노테이션) Retrofit의 핵심 개념 중 하나는 어노테이션을 사용하여 인터페이스 메서드를 HTTP 요청으로 매핑하는 것이다. 예를 들어, @GET, @POST, @PUT, @DELETE와 같은 어노테이션을 사용하여 HTTP 메서드를 지정하고, @Path, @Qu..

Tistory

9466번: 텀 프로젝트 - Kotlin (BFS)

9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 문제 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 수도 있다. 프로젝트 팀을 구성하기 위해, 모든 학생들은 프로젝트를 함께하고 싶은 학생을 선택해야 한다. (단, 단 한 명만 선택할 수 있다.) 혼자 하고 싶어하는 학생은 자기 자신을 선택하는 것도 가능하다. 학생들이(s1, s2, ..., sr)이라 할 때, r=1이고 s1이..

Tistory

2579번: 계단 오르기 - Kotlin

2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉..

Tistory

[Android Studio] 네이버 SENS로 SMS 인증 기능 Retrofit 구현하기 with kotlin (1)

나는 현재 개인 프로젝트를 진행하고 있다. 그 중에서, 지금은 회원가입 기능을 구현하고 있다. 회원가입을 할 때 우리가 항상 하는 것이 바로 SMS 인증이다. 국내에는 현재 무료로 이용할 수 있는 SMS 인증을 지원하는 API가 여러가지 존재한다. 나는 간단하게 핸드폰으로 6자리 랜덤 문자를 보내고 인증을 받을 수 있는 기능을 구현하고 싶어 여러가지 API들을 찾아보았다. 그런데 생각보다 관련 정보가 많이 없어서 이 블로그를 통해 나와 같은 고민이 있는 사람에게 도움이 되었으면 좋겠다는 생각에 글을 작성한다. 나는 직접적으로 SMS 인증을 지원하는 API를 사용하지 않고 간단하게 구현을 하려고 하였다. 그래서 SMS를 보낼 수 있는 API인 네이버 SENS를 사용해서 SMS 인증 기능을 구현하였다. 시작..

Tistory

FTP & FTPS

FTP(File Transfer Protocol) 이란? FTP는 인터넷 상에서 파일을 전송하기 위한 표준 프로토콜이며, TCP/ IP를 이용해 통신한다. FTP는 클라이언트와 서버 간에 데이터를 전송하는 데에 사용되며, 주로 웹 서버와 같은 리눅스 기반의 서버에서 사용된다. 기본적으로 암호화되지 않은 텍스트 기반 프로토콜이므로, 데이터 전송 중에 보안에 취약한면이 있다. 그래서 보안성을 강화한 방식인 FTPS가 개발되었다. 일반적으로 20, 21번 포트를 사용한다. FTPS(File Transfer Protocol Secure) 이란? FTPS는 FTP의 보안 버전으로, SSL/TLS 전용 포트인 990포트나 FTP와 동일한 20, 21 포트를 사용한다. FTPS의 방식은 이전에 설명했던 HTTP에서 ..

Tistory

6. Retrofit을 이용한 AWS EC2 서버 통신

이제부터는 우리가 지금까지 만들었던 서버와 Android간의 데이터 전달을 위한 Android 코드를 만들것이다. Android Studio의 코드를 작성하는데 생각보다 너무 많은 시간이 걸려서 이제 게시글을 작성한다. 우리가 할 것은 서버와 통신하기 위한 방법을 찾는 것이다. 서버와 통신할 수 있는 방법은 여러가지가 존재하는데 그 중 가장 많이 사용되고 가장 편리하게 사용할 수 있는 것이 바로 Retrofit이다. Retorfit에 대한 자세한 설명은 다음의 게시글을 참고하길 바란다. Retrofit Interface Retrofit을 사용하기 위해서는 Retrofit 인터페이스를 정의해야 한다. 이를 기반으로 HTTP 요청 및 응답 처리를 자동으로 생성한다. 내가 작성한 인터페이스는 다음과 같다. i..

Tistory

HTTP & HTTPS

HTTP(HyperText Transfer Protocol) 이란? 기본적으로 HTTP는 애플리케이션 계층에서 인터넷에서 웹 페이지를 전송하기 위해 사용되는 프로토콜이다. HTTP는 클라이언트와 서버 간에 데이터를 주고받을 수 있는 규칙을 정의하고 있다. 클라이언트는 웹 브라우저를 통해 서버에 HTTP 요청을 보내면, 서버는 이 요청에 대한 응답을 다시 클라이언트에게 전송한다. 이 과정에서 요청과 응답은 HTTP 메시지 형태로 전송된다. HTTP는 일반적으로 TCP/IP 프로토콜을 사용한다. 클라이언트가 요청을 보내면 서버는 이에 대한 응답을 전송하고 연결을 종료한다. 이러한 방식을 '요청 / 응답' 모델이라고 한다. 상태가 존재하지 않는 Stateless 프로토콜 HTTP의 요청 및 응답방식은 인터..

Tistory

SSL & TLS

SSL(Secure Sockets Layer) 이란? SSL은 클라이언트와 서버 간의 통신을 암호화하는 보안 프로토콜이다. SSL 3.0 버전에서 보안 취약점이 발견되어, 이후 버전에서는 TLS 프로토콜이 사용된다. TLS는 SSL과 호환되며, 더욱 강력한 암호화 기능을 제공한다. 'HTTPS://' 로 사용되는 웹 사이트가 있다면 SSL을 사용하는 경우라고 볼 수있다. TLS(Transport Layer Security) TLS는 클라이언트와 서버 간의 통신을 암호화하기 위해 대칭키 암호화와 공개키 암호화를 혼합하여 사용한다. 대칭키 암호화는 데이터를 전송하는 데 사용되며, 공개키 암호화는 대칭키를 안전하게 전달하기 위해 사용된다. 또한, TLS는 디지털 인증서를 사용해 서버의 신원을 확인한다. 디지털..

Tistory

SSH & SCP & SFTP

SSH (Secure SHELL, 시큐어 셀) 란? SSH란 인터넷을 통해 다른 컴퓨터나 서버에 안전하게 원격으로 접속하고 명령을 실행하는 프로토콜이다. SSH는 암호화된 통신을 사용하기 때문에, 인터넷을 통해 전송되는 데이터가 제3자에게 노출되는 것을 방지할 수 있다. SSH 연결을 설정하려면 SSH 클라이언트를 사용하여 원격 컴퓨터에 접속하고, 원하는 작업을 수행한다. 일반적으로, SSH 클라이언트는 Unix 또는 Linux 시스템에서 기본으로 제공된다. Windows 운영체제를 사용하는 경우, PuTTY와 같은 SSH 클라이언트를 설치해야 한다. SSH는 어디에 사용하는가? 원격 서버에 로그인: SSH를 사용해 원격 서버에 로그인하면 로컬 머신에서 작업한 것과 동일한 명령을 원격 서버에서 수행할 수..

Tistory

4. MySQL Workbench 로 데이터베이스 구축

이제부터는 개인 프로젝트를 위한 데이터베이스를 구축하기 위한 설정을 마무리하고, 본격적으로 데이터베이스를 만들어보겠다. MySQL Workbench MySQL Workbench는 MySQL 데이터베이스를 관리하고 시각화 하기 위한 공식 GUI 도구이다. 사용자가 데이터베이스를 만들고 수정하며 관리할 수 있도록 그래픽 인터페이스를 제공한다. MySQL Workbench는 데이터베이스 개발, 관리, 설계 및 문서화를 위한 통합 환경을 제공한다. 다양한 툴을 통해 MySQL 서버 관리와 데이터베이스 개발을 할 수 있다. 이런 장점이 많음으로 MySQL Workbench를 이용하고자 한다. 우리는 지금까지 AWS EC2 ubuntu에 APM를 설치하였다. MySQL Workbench의 설치는 아래에서 가능하다...

Tistory

14890번: 경사로 - Kotlin

14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 문제 크기가 N×N인 지도가 있다. 지도의 각 칸에는 그 곳의 높이가 적혀져 있다. 오늘은 이 지도에서 지나갈 수 있는 길이 몇 개 있는지 알아보려고 한다. 길이란 한 행 또는 한 열 전부를 나타내며, 한쪽 끝에서 다른쪽 끝까지 지나가는 것이다. 다음과 같은 N=6인 경우 지도를 살펴보자. 이때, 길은 총 2N개가 있으며, 아래와 같다. 길을 지나갈 수 있으려면 길에 속한 모든 칸의 높이가 모두 같아야 한다. 또는, 경사로를 놓아서 지나갈 수 있는 길을 만들 수 있다. 경사로는 높이가 ..

Tistory

5. Android 연동을 위한 PHP 작성

이제는 생성된 데이터베이스와 Android를 연동시키기 위한 PHP를 구현해 보겠다. 가장 먼저 해야할 일은 안드로이드 앱과 연동하는 PHP 코드를 작성하는 것이다. PHP 파일을 작성한 다음, SSH 클라이언트를 사용해서 원격 서버로 업로드 하는 과정을 거치면 우리가 원하는 기능을 구현할 수 있다. PHP 개발환경 설정하기 PHP를 작성하기 위해 사용되는 텍스트 에디터는 여러 가지가 존재한다. 그 중에서 가장 유명하고 많이 사용되는 Visual Studio Code 일명 VSCode를 이용해서 PHP를 작성하고자 한다. ① VSCode 환경 설정 1) VSCode 설치 - 아래의 사이트에서 VSCode를 설치할 수 있다. Download Visual Studio Code - Mac, Linux, Win..

Tistory

1644번: 소수의 연속합 - Kotlin (투 포인터, 에라토스테네스의 체)

1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두 가지) 하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데, 20이 그 예이다. 7+13을 계산하면 20이 되기는 하나 7과 13이 연속이 아니기에 적합한 표현이 아니다. 또한 한 소수는 반드시 한 번만 덧셈에 사용될 수 있기 때문에, 3+5+5+7과 같은 표현도 적합하지 않다. 자연수가 주어졌을 때, 이 자..

Tistory

3. AWS EC2 인스턴스에 APM 설치

우리는 이전의 게시글에서 SSH 클라이언트인 PuTTY를 사용해서 AWS EC2 우분투 서버에 로그인을 하였다. 하지만 이것만으로는 개인 프로젝트를 진행할때 백엔드를 다 구축했다고 말할 수 없다. 클라이언트에서 데이터베이스에서 원하는 값을 찾아오기 위해서는 다음 그림과 같은 과정을 거쳐야 한다. 웹 사이트를 개발할 때 Apache는 클라이언트의 요청을 받아들여 정적 웹 페이지를 반환하거나 PHP 스크립트를 실행하여 동적 웹 페이지를 생성하고, PHP는 스크립트를 실행하여 웹 페이지를 생성하고 MySQL은 데이터를 저장하고 관리한다. 이렇게 함께 작동하면서 웹 사이트를 구성하게 된다. 이 과정을 수행하기 위해서는 우리가 할당 받은 AWS EC2 ubuntu 서버에 APM를 설치하는 과정이 필요하다. 이제부..

Tistory

Database Schema (데이터베이스 스키마)

데이터 베이스 스키마란? 데이터베이스 스키마란, 데이터페이스에서 사용하는 데이터 구조, 데이터베이스 객체의 구성 및 관계 등을 정의하는 논리적인 구조를 의미한다. 데이터베이스 스키마는 데이터베이스의 구조와 데이터의 종류를 정의하는데 사용된다. 즉, 데이터베이스에 저장되는 데이터의 타입, 크기, 제약 조건, 테이블 간의 관계 등을 정의한다. 데이터베이스 스키마는 물리적인 데이터베이스 객체와 무관하며, 데이터베이스 객체를 생성할때 사용되는 템플릿 또는 설계도와 같은 역할을 한다. 따라서, 데이터베이스 스키마는 데이터의 무결성 및 일관성을 유지하기 위한 중요한 요소이다. 데이터베이스 스키마는 대개 데이터베이스 설계자 또는 데이터베이스 관리자가 작성하며, SQL 문법을 사용하여 생성할 수 있다. 예를 들어, C..

Tistory

1005번: ACM Craft - Kotlin (위상 정렬)

1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 문제 서기 2012년! 드디어 2년간 수많은 국민들을 기다리게 한 게임 ACM Craft (Association of Construction Manager Craft)가 발매되었다. 이 게임은 지금까지 나온 게임들과는 다르게 ACM크래프트는 다이나믹한 게임 진행을 위해 건물을 짓는 순서가 정해져 있지 않다. 즉, 첫 번째 게임과 두 번째 게임이 건물을 짓는 순서가 다를 수도 있다. 매 게임시작 시 건물을 짓는 순서가 주어진다. 또한 모든 건물은 각각 건설을..

Tistory

1. 서버 시작하기 by AWS EC2 서버 할당

이번 게시글은 개인 프로젝트에서 필수적으로 필요한 서버를 할당 받는 방법을 알아보고자 한다. 개인 프로젝트를 시작할때 간단한 프로젝트가 아니라면 서버는 필수적인 요소이다. 서버를 만드는 방법은 크게 두 가지로 나뉜다. 클라우드 서비스 제공 업체에서 인스턴스 생성 AWS, Azure, GCP, DigitalOcean, Linode 등의 클라우드 서비스 제공 업체에서는 쉽게 서버 인스턴스를 생성할 수 있다. 이를 위해서는 해당 업체에서 제공하는 콘솔이나 CLI(Command Line Interface)를 사용하여 인스턴스 생성을 진행하면 된다. 대체로 다음과 같은 단계로 인스턴스를 생성할 수 있다. 원하는 운영 체제 선택 (예: Ubuntu, CentOS, Windows Server 등) 인스턴스 유형 ..

Tistory

2. SSH를 사용하여 AWS E2C 인스턴스에 로그인하기

SSH에 대한 이해가 부족한 사람은 아래의 글을 참고하길 바란다 SSH & SCP & SFTP SSH (Secure SHELL, 시큐어 셀) 란? SSH란 인터넷을 통해 다른 컴퓨터나 서버에 안전하게 원격으로 접속하고 명령을 실행하는 프로토콜이다. SSH는 암호화된 통신을 사용하기 때문에, 인터넷을 통해 전 everyday-develop-myself.tistory.com SSH를 사용하여 AWS E2C 인스턴스에 로그인하기 ① PuTTY 다운로드 SSH 명령어를 사용하기 위해서는 SSH 클라이언트 애플리케이션을 설치해야 한다. SSH 클라이언트로는 PuTTY, OpenSSH, SecureCRT 등이 존재한다. 그 중에서 우리는 가장 많이 사용되는 PuTTY를 이용해서 SSH 명령어를 사용하고자 한다. P..

Tistory

Dependency Injection (DI, 의존성 주입) with Kotlin

의존성 주입이란? 객체는 다른 객체와 상호작용하면서 필요한 다른 객체에 의존한다. 이러한 의존 관계는 코드를 작성할 때 자연스럽게 발생하는데, 이러한 의존성이 많아지면 코드의 유지보수성이 떨어지고, 객체를 재사용하기 어려워진다. 이 때, 의존성 주입은 객체 간의 결합도를 낮추기 위해, 객체를 생성하는 시점에 필요한 의존성 객체를 외부에서 전달받는 방식이다. 즉, 객체 내부에서 직접 의존 객체를 생성하지 않고, 외부에서 전달받아 사용한다. 의존성 주입은 크게 3가지 방법이 존재한다. 생성자 주입(Constructor Injection): 생성자를 통해 의존 객체를 전달받는다. 세터 주입(Setter Injection): 세터 메서드를 통해 의존 객체를 전달받는다. 필드 주입(Field Injection):..

Tistory

가독성이 좋은 코드를 작성해야 하는 이유

가독성이 좋은 코드를 작성해야 하는 이유 코드가 가독성이 좋다면 여러 가지 이점이 존재한다. 유지보수 용이성: 가독성이 높은 코드는 코드를 수정하거나 유지보수하는 데 더 적은 시간과 노력이 필요하다. 코드를 쉽게 이해할 수 있으므로 버그를 찾고 수정하는 것도 쉬워진다. 협업 용이성: 가독성이 좋은 코드는 여러 사람이 함께 작업할 때 협업을 용이하게 만든다. 다른 사람이 작성한 코드를 빠르게 이해하고 수정할 수 있기 때문이다. 성능 개선: 가독성이 좋은 코드는 더 효율적이며 성능이 더 좋다. 이는 코드를 더욱 간결하게 작성하고 불필요한 코드를 제거하기 때문이다. 코딩 스타일 표준화: 가독성이 좋은 코드는 일관된 코딩 스타일을 유지하기 쉽다. 이는 코드의 가독성을 향상시키고, 일관성을 유지하며, 코드를 더 ..

Tistory

Topological sort (위상 정렬) with 2252번: 줄 세우기 - Kotlin

위상 정렬이란? 위상 정렬이란 방향이 있는 비순환 그래프(DAG, Directed Acyclic Graph)에서 모든 노드를 방향성에 따라 순서대로 정렬하는 알고리즘이다. 즉, 모든 노드들을 자신을 가리키는 화살표가 있는 다른 노드보다 앞에 오도록 배열하는 것이다. 이 알고리즘은 그래프 내부의 우선순위가 있는 작업들을 수행하는 순서를 결정하기 위해 사용된다. 위상 정렬 알고리즘의 핵심은 진입 차수(in-degree)를 이용하는 것이다. 진입 차수는 어떤 노드로 들어오는 화살표의 수를 의미한다. 위상 정렬은 진입 차수가 0인 노드부터 처리하면서, 해당 노드에서 출발하는 모든 화살표를 제거하고, 그 화살표를 제거한 노드의 진입차수를 감소시킨다. 이러한 과정을 반복하여 모든 노드를 처리하는 순서를 구한다. 위..

Tistory

1520번: 내리막 길 - Kotlin

1520번: 내리막 길 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으 www.acmicpc.net 문제 여행을 떠난 세준이는 지도를 하나 구하였다. 이 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 한 칸은 한 지점을 나타내는데 각 칸에는 그 지점의 높이가 쓰여 있으며, 각 지점 사이의 이동은 지도에서 상하좌우 이웃한 곳끼리만 가능하다. 현재 제일 왼쪽 위 칸이 나타내는 지점에 있는 세준이는 제일 오른쪽 아래 칸이 나타내는 지점으로 가려고 한다. 그런데 가능한 힘을 적게 들이고 싶어 항상 높이가 더 낮은 지점으로만 이동하여 목표 지점까지 ..

Tistory

1238번: 파티 - Kotlin

1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다. 각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이..

Tistory

아키텍처 패턴 - MVVM Pattern with Kotlin

MVVM (Model - View - ViewModel) MVVM은 UI와 비즈니스 로직을 분리하여 개발하는데 사용되는 패턴이다. MVVM는 응용 프로그램을 세 가지의 구성요소로 나눈다. Model - Model은 사용자 인터페이스에 표시되거나 실행될 데이터를 정의하는 인터페이스이다. View - View는 사용자에게 데이터를 표시하는 UI 컴포넌트이다. ViewModel- ViewModel은 View와 Model 간의 통신을 관리하고 View에 표시할 데이터를 제공한다. MVVM 패턴은 View와 ViewModel 사이에서 데이터 바인딩을 사용하여 View와 ViewModel을 느슨하게 결합한다. 이는 ViewModel이 데이터를 업데이트하면 자동으로 View도 업데이트되도록 한다. 또한, ViewMo..

Tistory

2573번: 빙산 - Kotlin (BFS)

2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 문제 지구 온난화로 인하여 북극의 빙산이 녹고 있다. 빙산을 그림 1과 같이 2차원 배열에 표시한다고 하자. 빙산의 각 부분별 높이 정보는 배열의 각 칸에 양의 정수로 저장된다. 빙산 이외의 바다에 해당되는 칸에는 0이 저장된다. 그림 1에서 빈칸은 모두 0으로 채워져 있다고 생각한다. 2 4 5 3 3 2 5 2 7 6 2 4 그림 1. 행의 개수가 5이고 열의 개수가 7인 2차원 배열에 저장된 빙산의 높이 정보 빙산의 높이는 바닷물에 많이 접해있는 부분..

Tistory

2206번: 벽 부수고 이동하기 - Kotlin (BFS)

2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 문제 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 만약에 이동하는 도중에 한 개의 벽을 부수고 이동하는 것이 좀 더 경로가 짧아진다면, 벽을 ..

Tistory

교점에 별 만들기 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 Ax + By + C = 0으로 표현할 수 있는 n개의 직선이 주어질 때, 이 직선의 교점 중 정수 좌표에 별을 그리려 합니다. 예를 들어, 다음과 같은 직선 5개를 2x - y + 4 = 0 -2x - y + 4 = 0 -y + 1 = 0 5x - 8y - 12 = 0 5x + 8y + 12 = 0 좌표 평면 위에 그리면 아래 그림과 같습니다. 이때, 모든 교점의 좌표는 (4, 1), (4, -4), (-4, -4), (-4, 1), (0, 4), (1.5, 1.0), (2.1, -0.19), (..

Tistory

택배 배달과 수거 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 당신은 일렬로 나열된 n개의 집에 택배를 배달하려 합니다. 배달할 물건은 모두 크기가 같은 재활용 택배 상자에 담아 배달하며, 배달을 다니면서 빈 재활용 택배 상자들을 수거하려 합니다. 배달할 택배들은 모두 재활용 택배 상자에 담겨서 물류창고에 보관되어 있고, i번째 집은 물류창고에서 거리 i만큼 떨어져 있습니다. 또한 i번째 집은 j번째 집과 거리 j - i만큼 떨어져 있습니다. (1 ≤ i ≤ j ≤ n) 트럭에는 재활용 택배 상자를 최대 cap개 실을 수 있습니다. 트럭은 배달할 재활용 택배 ..

Tistory

양궁대회 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원회는 한 선수의 연속 우승보다는 다양한 선수들이 양궁대회에서 우승하기를 원합니다. 따라서, 양궁대회 운영위원회는 결승전 규칙을 전 대회 우승자인 라이언에게 불리하게 다음과 같이 정했습니다. 어피치가 화살 n발을 다 쏜 후에 라이언이 화살 n발을 쏩니다. 점수를 계산합니다. 과녁판은 아래 사진처럼 생겼으며 가장 작은 원의 과녁 점수는 ..

Tistory

혼자서 하는 틱택토 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 틱택토는 두 사람이 하는 게임으로 처음에 3x3의 빈칸으로 이루어진 게임판에 선공이 "O", 후공이 "X"를 번갈아가면서 빈칸에 표시하는 게임입니다. 가로, 세로, 대각선으로 3개가 같은 표시가 만들어지면 같은 표시를 만든 사람이 승리하고 게임이 종료되며 9칸이 모두 차서 더 이상 표시를 할 수 없는 경우에는 무승부로 게임이 종료됩니다. 할 일이 없어 한가한 머쓱이는 두 사람이 하는 게임인 틱택토를 다음과 같이 혼자서 하려고 합니다. 혼자서 선공과 후공을 둘 다 맡는다. 틱택토 게임을 시작한 후 "..

Tistory

이모티콘 할인행사 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 카카오톡에서는 이모티콘을 무제한으로 사용할 수 있는 이모티콘 플러스 서비스 가입자 수를 늘리려고 합니다. 이를 위해 카카오톡에서는 이모티콘 할인 행사를 하는데, 목표는 다음과 같습니다. 이모티콘 플러스 서비스 가입자를 최대한 늘리는 것. 이모티콘 판매액을 최대한 늘리는 것. 1번 목표가 우선이며, 2번 목표가 그 다음입니다. 이모티콘 할인 행사는 다음과 같은 방식으로 진행됩니다. n명의 카카오톡 사용자들에게 이모티콘 m개를 할인하여 판매합니다. 이모티콘마다 할인율은 다를 수 있으며, 할인율은 10%..

Tistory

1715번: 카드 정렬하기 - Kotlin (우선순위큐)

1715번: 카드 정렬하기 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장 www.acmicpc.net 문제 정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장의 숫자 카드 묶음을 합치려면 50번의 비교가 필요하다. 매우 많은 숫자 카드 묶음이 책상 위에 놓여 있다. 이들을 두 묶음씩 골라 서로 합쳐나간다면, 고르는 순서에 따라서 비교 횟수가 매우 달라진다. 예를 들어 10장, 20장, 40장의 묶..

Tistory

시소 짝궁 - Kotlin

https://school.programmers.co.kr/learn/courses/30/lessons/152996#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 어느 공원 놀이터에는 시소가 하나 설치되어 있습니다. 이 시소는 중심으로부터 2(m), 3(m), 4(m) 거리의 지점에 좌석이 하나씩 있습니다. 이 시소를 두 명이 마주 보고 탄다고 할 때, 시소가 평형인 상태에서 각각에 의해 시소에 걸리는 토크의 크기가 서로 상쇄되어 완전한 균형을 이룰 수 있다면 그 두 사람을 시소 짝꿍이라고 합니다. 즉, 탑승한 사람의 무게와 시소 축과 ..

Tistory

순위 검색 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 [본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.] 카카오는 하반기 경력 개발자 공개채용을 진행 중에 있으며 현재 지원서 접수와 코딩테스트가 종료되었습니다. 이번 채용에서 지원자는 지원서 작성 시 아래와 같이 4가지 항목을 반드시 선택하도록 하였습니다. 코딩테스트 참여 개발언어 항목에 cpp, java, python 중 하나를 선택해야 합니다. 지원 직군 항목에 backend와 frontend 중 하나를 선택해야 합니다. 지원 경력구분 항목에 junior와 senior 중 하나를 선..

Tistory

2580번: 스도쿠 - kotlin (DFS)

2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 문제 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루어진 정사각형 판 위에서 이뤄지는데, 게임 시작 전 일부 칸에는 1부터 9까지의 숫자 중 하나가 쓰여 있다. 나머지 빈 칸을 채우는 방식은 다음과 같다. 각각의 가로줄과 세로줄에는 1부터 9까지의 숫자가 한 번씩만 나타나야 한다. 굵은 선으로 구분되어 있는 3x3..

Tistory

17298번: 오큰수 - Kotlin (스택)

17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 문제 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, ..

Tistory

2003번: 부분합 - Kotlin (투포인터)

1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. 출력 첫째 줄에 구하고자 하는 최..

Tistory

혼자 놀기의 달인 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 혼자서도 잘 노는 범희는 어느 날 방구석에 있는 숫자 카드 더미를 보더니 혼자 할 수 있는 재미있는 게임을 생각해냈습니다. 숫자 카드 더미에는 카드가 총 100장 있으며, 각 카드에는 1부터 100까지 숫자가 하나씩 적혀있습니다. 2 이상 100 이하의 자연수를 하나 정해 그 수보다 작거나 같은 숫자 카드들을 준비하고, 준비한 카드의 수만큼 작은 상자를 준비하면 게임을 시작할 수 있으며 게임 방법은 다음과 같습니다. 준비된 상자에 카드를 한 장씩 넣고, 상자를 무작위로 섞어 일렬로 나열합니다. 상자..

Tistory

조이스틱 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. - 다음 알파벳 - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로) - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서) - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서) 예를 들어 아래의 방법으로 "JAZ"를 만들 수 있습니..

Tistory

11404번: 플로이드 - Kotlin

11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 문제 n(2 ≤ n ≤ 100)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1 ≤ m ≤ 100,000)개의 버스가 있다. 각 버스는 한 번 사용할 때 필요한 비용이 있다. 모든 도시의 쌍 (A, B)에 대해서 도시 A에서 B로 가는데 필요한 비용의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진..

Tistory

숫자 카드 나누기 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 철수와 영희는 선생님으로부터 숫자가 하나씩 적힌 카드들을 절반씩 나눠서 가진 후, 다음 두 조건 중 하나를 만족하는 가장 큰 양의 정수 a의 값을 구하려고 합니다. 철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a 영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 철수가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a 예를 들어, 카드들에 10, 5, 20, 17이 적혀 있는 경우에 대해 ..

Tistory

마법의 엘리베이터 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 마법의 세계에 사는 민수는 아주 높은 탑에 살고 있습니다. 탑이 너무 높아서 걸어 다니기 힘든 민수는 마법의 엘리베이터를 만들었습니다. 마법의 엘리베이터의 버튼은 특별합니다. 마법의 엘리베이터에는 -1, +1, -10, +10, -100, +100 등과 같이 절댓값이 10c (c ≥ 0 인 정수) 형태인 정수들이 적힌 버튼이 있습니다. 마법의 엘리베이터의 버튼을 누르면 현재 층 수에 버튼에 적혀 있는 값을 더한 층으로 이동하게 됩니다. 단, 엘리베이터가 위치해 있는 층과 버튼의 값을 더한 결과가 0..

Tistory

호텔 대실 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 호텔을 운영 중인 코니는 최소한의 객실만을 사용하여 예약 손님들을 받으려고 합니다. 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있습니다. 예약 시각이 문자열 형태로 담긴 2차원 배열 book_time이 매개변수로 주어질 때, 코니에게 필요한 최소 객실의 수를 return 하는 solution 함수를 완성해주세요. 나의 풀이 이 문제는 문제의 설명만큼 간단한 그리디 문제이다. 하지만 나는 이 문제를 풀때 중간에 check 부분을 반복문 밖에다가 설정해버려..

Tistory

하노이의 탑 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있습니다. 게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것입니다. 한 번에 하나의 원판만 옮길 수 있습니다. 큰 원판이 작은 원판 위에 있어서는 안됩니다. 하노이 탑의 세 개의 기둥을 왼쪽 부터 1번, 2번, 3..

Tistory

후보키 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 후보키 프렌즈대학교 컴퓨터공학과 조교인 제이지는 네오 학과장님의 지시로, 학생들의 인적사항을 정리하는 업무를 담당하게 되었다. 그의 학부 시절 프로그래밍 경험을 되살려, 모든 인적사항을 데이터베이스에 넣기로 하였고, 이를 위해 정리를 하던 중에 후보키(Candidate Key)에 대한 고민이 필요하게 되었다. 후보키에 대한 내용이 잘 기억나지 않던 제이지는, 정확한 내용을 파악하기 위해 데이터베이스 관련 서적을 확인하여 아래와 같은 내용을 확인하였다. 관계 데이터베이스에서 릴레이션(Relation)..

Tistory

무인도 여행 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 메리는 여름을 맞아 무인도로 여행을 가기 위해 지도를 보고 있습니다. 지도에는 바다와 무인도들에 대한 정보가 표시돼 있습니다. 지도는 1 x 1크기의 사각형들로 이루어진 직사각형 격자 형태이며, 격자의 각 칸에는 'X' 또는 1에서 9 사이의 자연수가 적혀있습니다. 지도의 'X'는 바다를 나타내며, 숫자는 무인도를 나타냅니다. 이때, 상, 하, 좌, 우로 연결되는 땅들은 하나의 무인도를 이룹니다. 지도의 각 칸에 적힌 숫자는 식량을 나타내는데, 상, 하, 좌, 우로 연결되는 칸에 적힌 숫자를 모두 ..

Tistory

거리두기 확인하기 - Kotlin

https://school.programmers.co.kr/learn/courses/30/lessons/81302 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 개발자를 희망하는 죠르디가 카카오에 면접을 보러 왔습니다. 코로나 바이러스 감염 예방을 위해 응시자들은 거리를 둬서 대기를 해야하는데 개발 직군 면접인 만큼 아래와 같은 규칙으로 대기실에 거리를 두고 앉도록 안내하고 있습니다. 대기실은 5개이며, 각 대기실은 5x5 크기입니다. 거리두기를 위하여 응시자들 끼리는 맨해튼 거리1가 2 이하로 앉지 말아 주세요. 단 응시자가 앉아있는 자리 사..

Tistory

Euclidean algorithm (유클리드 호제법)

유클리드 호제법이란? 유클리드 알고리즘은 2개의 자연수의 최대 공약수를 구하는 알고리즘이다. 호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타낸다. 예시 1071과 1029의 최대공약수를 구하면, 1071은 1029로 나누어 떨어지지 않기 때문에, 1071을 1029로 나눈 나머지를 구한다. ≫ 42 1029는 42로 나누어 떨어지지 않기 때문에, 1029를 42로 나눈 나머지를 구한다. ≫ 21 42는 21로 나누어 떨어진다. 따라서, 최대공약수는 21이다. 78696과 19332의 최대공약수를 구하면, 78696 = 19332×4 + 1368 19332 = 1368×14 + 180 1368 = 180×7 + 108 180 = 108×1 + 72 108 = 72..

Tistory

문자열 압축 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문..

Tistory

9095번: 1, 2, 3 더하기 - Kotlin

9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. 나의 풀이 이 문제는 문제에..

Tistory

11053번: 가장 긴 증가하는 부분 수열

11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는..

Tistory

2170번: 선 긋기 - Kotlin (라인스위핑)

https://www.acmicpc.net/problem/2170 2170번: 선 긋기 첫째 줄에 선을 그은 횟수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y (-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다. www.acmicpc.net 문제 매우 큰 도화지에 자를 대고 선을 그으려고 한다. 선을 그을 때에는 자의 한 점에서 다른 한 점까지 긋게 된다. 선을 그을 때에는 이미 선이 있는 위치에 겹쳐서 그릴 수도 있는데, 여러 번 그은 곳과 한 번 그은 곳의 차이를 구별할 수 없다고 하자. 이와 같은 식으로 선을 그었을 때, 그려진 선(들)의 총 길이를 구하는 프로그램을 작성하시오. 선이 여러 번 그..

Tistory

개인 프로젝트 시작하기

나는 지금 학교를 졸업하고 취업을 준비중이다. 알고리즘 문제와 자료구조, CS를 공부하며 남는 시간에 조금씩 개인 프로젝트를 해보려고 한다. 학교에서 팀 프로젝트를 진행해 봤지만 지금 그 프로젝트는 절차없이 닥치는 대로 하나하나 설계를 하는 식으로 주먹구구식으로 진행을 했기 때문에 개인 프로젝트는 나름의 절차를 가지며 제대로 만들어 보고자 한다. IT 프로젝트 과정 이 내용은 아래의 유튜브를 참고하여 제작하였다. 불꽃남자님의 유튜브를 보면 IT 프로젝트가 어떻게 진행이 되는지 상세하게 나와있다. 개인 프로젝트를 진행 하는데 까지 실제로 회사에서 IT 프로젝트들이 진행되는 과정처럼 프로젝트를 진행 할 필요는 없다. 다만 최대한 내가 할 수 있는 부분은 하나 하나 해보면서 나중에 취직했을때 도움이 되고자 개..

Tistory

14500번: 테트로미노 - Kotlin

14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 문제 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져..

Tistory

1463번: 1로 만들기 - Kotlin

https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. 출력 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다. 나의 풀이 요즘 DP 문제를 접하고 있는데 DP 문제의 풀이 방식에 대한 기..

Tistory

14502번: 연구소 - Kotlin

14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 문제 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는..

Tistory

1753번: 최단경로 - Kotlin

1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 www.acmicpc.net 문제 방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다. 입력 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 주어진다. 셋째 줄부터 E개..

Tistory

1987번: 알파벳 - Kotlin (DFS)

1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다. 좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 ..

Tistory

1011번: Fly me to the Alpha Centauri

1011번: Fly me to the Alpha Centauri 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행 www.acmicpc.net 문제 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려 놓는 영광의 순간을 기다리고 있다. 그가 탑승하게 될 우주선은 Alpha Centauri라는 새로운 인류의 보금자리를 개척하기 위한 대규모 생활 유지 시스템을 탑재하고 있기 때문에, ..

Tistory

10026번: 적록색약 - Kotlin (BFS)

10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 문제 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록), B(파랑) 중 하나를 색칠한 그림이 있다. 그림은 몇 개의 구역으로 나뉘어져 있는데, 구역은 같은 색으로 이루어져 있다. 또, 같은 색상이 상하좌우로 인접해 있는 경우에 두 글자는 같은 구역에 속한다. (색상의 차이를 거의 느끼지 못하는 경우도 같은 색..

Tistory

9251번: LCS - Kotlin

9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. 입력 첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다. 출력 첫째 줄에 입력으로 주어진 두 문자열..

Tistory

7576번: 토마토 - Kotlin (BFS)

7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마..

Tistory

Knapsack Problem (배낭 문제) with 12865번: 평범한 배낭

배낭 문제란? 배낭 문제는 조합 최적화 문제의 일종이다. 간략하게 말하자면, 담을 수 있는 최대 무게가 정해진 배낭과 함께 각각의 무게와 가치가 주어진 아이템의 집합이 주어졌을 때, 배낭에 담은 아이템들의 가치의 합이 최대가 되도록 하는 아이템들의 부분집합을 찾는 문제이다. 우리가 흔히 쓰는 배낭 문제는 Fraction Knapsack Problem 0-1 Knapsack Problem 이 2가지가 존재한다. Fraction Knapsack Problem (분할 가능한 배낭 문제) with Greedy Algorithm 내가 배낭 문제를 처음 접했을때 든 생각은 "어 이거 그리디 알고리즘 아닌가?" 였다. 그리디 알고리즘에서 가장 유명한 문제인 동전 거스름돈 문제는 일단 거스름돈으로 사용할 500원, 1..

Tistory

12865번: 평범한 배낭 - Kotlin

12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 문제 이 문제는 아주 평범한 배낭에 관한 문제이다. 한 달 후면 국가의 부름을 받게 되는 준서는 여행을 가려고 한다. 세상과의 단절을 슬퍼하며 최대한 즐기기 위한 여행이기 때문에, 가지고 다닐 배낭 또한 최대한 가치 있게 싸려고 한다. 준서가 여행에 필요하다고 생각하는 N개의 물건이 있다. 각 물건은 무게 W와 가치 V를 가지는데, 해당 물건을 배낭에 넣어서 가면 준서가 V만큼 즐길 수 있다. 아직..

Tistory

택배 상자 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 영재는 택배상자를 트럭에 싣는 일을 합니다. 영재가 실어야 하는 택배상자는 크기가 모두 같으며 1번 상자부터 n번 상자까지 번호가 증가하는 순서대로 컨테이너 벨트에 일렬로 놓여 영재에게 전달됩니다. 컨테이너 벨트는 한 방향으로만 진행이 가능해서 벨트에 놓인 순서대로(1번 상자부터) 상자를 내릴 수 있습니다. 하지만 컨테이너 벨트에 놓인 순서대로 택배상자를 내려 바로 트럭에 싣게 되면 택배 기사님이 배달하는 순서와 택배상자가 실려 있는 순서가 맞지 않아 배달에 차질이 생깁니다. 따라서 택배 기사님이 ..

Tistory

14503번: 로봇 청소기 - Kotlin

14503번: 로봇 청소기 첫째 줄에 방의 크기 $N$과 $M$이 입력된다. $(3 \le N, M \le 50)$ 둘째 줄에 처음에 로봇 청소기가 있는 칸의 좌표 $(r, c)$와 처음에 로봇 청소기가 바라보는 방향 $d$가 입력된다. $d$가 $0$인 경우 북쪽 www.acmicpc.net 나의 풀이 이 문제는 문제에서 말하는대로만 따라가다 보면 쉽게 해결할 수 있는 간단한 시뮬레이션 문제이다. 리팩토링을 통해 더 좋은 코드를 만들 수 있겠지만 나는 직관적으로 문제를 해결하였다. 이 문제는 주석을 통해 문제를 설명하겠다. val dx = arrayOf(-1, 0, 1, 0) val dy = arrayOf(0, 1, 0, -1) lateinit var room : Array fun main() = wi..

Tistory

BackTracking with 9663번: N-Queen

백트래킹이란? 백트래킹이란 원하는 값을 찾는 도중 현재 대상이 원하는 값이 아닐때, 더 이상 그 대상을 탐색하지 않고 전 단계로 돌아가서 원하는 값을 푸는 방식이다. 우리가 가장 많이 사용하는 방식인 DFS, BFS가 바로 백트래킹에 속한다고 한다. DFS, BFS가 바로 백트래킹에 속한다고 한다. 사실 이 말은 매우 불친절한 말이다. 백트래킹이 무엇인가에 대해 의문점이 생겨서 많은 게시글들을 참고하고 여기저기를 뒤져본 결과 나름 내가 내려본 결론은 백트래킹은 DFS 나 BFS에서 조건문을 통해 우리가 찾고자 하는 값이 절대 아닌 것들은 탐색하지 않고 우리가 찾고자 하는 값이 있는 것들만을 탐색하여 우리가 원하는 값을 찾는 방식이라고 생각한다. 이해를 돕기위한 예로 유명한 백트래킹 문제를 가져와 보겠다...

Tistory

Dijkstra Algorithm (다익스트라 알고리즘) with 프로그래머스 - 배달

다익스트라 알고리즘이란? 다익스트라 알고리즘은 그래프의 한 정점에서 모든 정점까지의 최단거리를 각각 구하는알고리즘이다. 가능한 적은 비용으로 가장 빠르게 해답에 도달하는 경로를 찾아내는 대부분의 문제에 응용된다. 처음 고안되었을때의 다익스트라 알고리즘은 O(N²)의 시간복잡도를 가진다. 이후에 PriorityQueue 를 이용해서 O(NlogN) 까지 시간복잡도를 줄이는 방식이 고안되었다. 다익스트라 알고리즘은 다음과 같다. (P[A][B]는 A와 B 사이의 거리라고 가정한다. 출발점으로부터의 최단거리를 저장할 배열 d[v]를 만들고, 출발 노드에는 0을, 출발점을 제외한 다른 노드들에는 매우 큰 값 INF를 채워 넣는다. (정말 무한이 아닌, 무한으로 간주될 수 있는 값을 의미한다.) 보통은 최단거리 ..

Tistory

Floyd-Warshall Algirithm (플로이드 워셜 알고리즘)

플로이드 워셜 알고리즘이란? 플로이드 워셜 알고리즘은 그래프에서 가능한 모든 노드 쌍에 대해 최단 거리를 구하는 알고리즘이다. 이전에 배웠던 다익스트라 알고리즘은 한 노드에서 가능한 모든 노드 쌍에 대해 최단 거리를 구했기 때문에 이 점이 2가지의 알고리즘에 차이라고 할 수 있다. 플로이드 워셜 알고리즘의 시간 복잡도는 O(N³)으로 3중 for문으로 보통 모든 경우의 수를 비교한다. 플로이드 워셜 알고리즘의 핵심은 거쳐가는 정점을 기준으로 최단 거리를 구하는 것이다. 그래서 k를 두어서 모든 노드에 대해서 최단 거리를 구할 수 있도록 하였다. fun floydWarshall() { val d = Array(4) { IntArray(4) } for (i in 0 until 4) { for (j in 0 ..

Tistory

행렬 테두리 회전하기 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 rows x columns 크기인 행렬이 있습니다. 행렬에는 1부터 rows x columns까지의 숫자가 한 줄씩 순서대로 적혀있습니다. 이 행렬에서 직사각형 모양의 범위를 여러 번 선택해, 테두리 부분에 있는 숫자들을 시계방향으로 회전시키려 합니다. 각 회전은 (x1, y1, x2, y2)인 정수 4개로 표현하며, 그 의미는 다음과 같습니다. x1 행 y1 열부터 x2 행 y2 열까지의 영역에 해당하는 직사각형에서 테두리에 있는 숫자들을 한 칸씩 시계방향으로 회전합니다. 다음은 6 x 6 크기 ..

Tistory

ArrayList & LinkedList

이번에는 ArrayList와 LinkedList에 대해서 알아보도록 하겠다. 이름만 봐도 알 수 있듯 2개의 자료구조는 Java에서 제공하는 List 인터페이스를 구현한 Collection 구현체이다. 하지만 동작하는 기능은 서로 다르기 때문에 하나하나 알아보고자 한다. ArrayList ArrayList는 중복을 허용하고 순서를 가지며 인덱스로 원소들을 관리한다. 이 말을 들으면 우리는 바로 ArrayList는 Array와 매우 유사한 기능을 가지고 있다고 생각할 수 있다. ArrayLIst란 이름에서도 알 수 있듯이 Array의 이런 점, List의 데이터가 저장될 때 필요에 의해 자동으로 늘어나며 순서를 가지는 점을 가지고 있다. Array와 가장 큰 차이점은 Array는 처음에 크기를 지정하면 그..

Tistory

PriorityQueue & Heap

PriorityQueue 우리는 이전에 Queue의 구조에 대하여 학습한적이 있다. Queue는 First In First Out 구조로 먼저 집어넣은 데이터가 먼저 나오는 구조를 가지고 있다. 하지만 PriorityQueue는 이름에서 알 수 있듯이 Queue의 구조에서 데이터의 우선순위에 따라서 우선순위가 높은 데이터가 먼저 나오는 구조를 가지고 있다. 위의 구조는 PriorityQueue의 구조이다. 데이터를 무작위로 Enqueue 했을때 그 순서와 상관없이 우선순위가 높은 데이터가 가장 왼쪽에 위치하는 것을 알 수 있다. 구현 PriorityQueue의 구현은 Array, LinkedList, Heap으로 가능하다. 다만 Array와 LinkedList는 매번 가장 높은 우선순위의 데이터를 가장 ..

Tistory

17779번: 게리맨더링 2 - Kotlin

17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net 문제 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름도 재현시로 변경했다. 이번 선거에서는 최대한 공평하게 선거구를 획정하려고 한다. 재현시는 크기가 N×N인 격자로 나타낼 수 있다. 격자의 각 칸은 구역을 의미하고, r행 c열에 있는 구역은 (r, c)로 나타낼 수 있다. 구역을 다섯 개의 선거구로 나눠야 하고, 각 구역은 다섯 선거구..

Tistory

11559번: Puyo Puyo - kotlin (BFS)

11559번: Puyo Puyo 총 12개의 줄에 필드의 정보가 주어지며, 각 줄에는 6개의 문자가 있다. 이때 .은 빈공간이고 .이 아닌것은 각각의 색깔의 뿌요를 나타낸다. R은 빨강, G는 초록, B는 파랑, P는 보라, Y는 노랑이다. www.acmicpc.net 문제 뿌요뿌요의 룰은 다음과 같다. 필드에 여러 가지 색깔의 뿌요를 놓는다. 뿌요는 중력의 영향을 받아 아래에 바닥이나 다른 뿌요가 나올 때까지 아래로 떨어진다. 뿌요를 놓고 난 후, 같은 색 뿌요가 4개 이상 상하좌우로 연결되어 있으면 연결된 같은 색 뿌요들이 한꺼번에 없어진다. 이때 1연쇄가 시작된다. 뿌요들이 없어지고 나서 위에 다른 뿌요들이 있다면, 역시 중력의 영향을 받아 차례대로 아래로 떨어지게 된다. 아래로 떨어지고 나서 다시..

Tistory

롤케이크 자르기 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 철수는 롤케이크를 두 조각으로 잘라서 동생과 한 조각씩 나눠 먹으려고 합니다. 이 롤케이크에는 여러가지 토핑들이 일렬로 올려져 있습니다. 철수와 동생은 롤케이크를 공평하게 나눠먹으려 하는데, 그들은 롤케이크의 크기보다 롤케이크 위에 올려진 토핑들의 종류에 더 관심이 많습니다. 그래서 잘린 조각들의 크기와 올려진 토핑의 개수에 상관없이 각 조각에 동일한 가짓수의 토핑이 올라가면 공평하게 롤케이크가 나누어진 것으로 생각합니다. 예를 들어, 롤케이크에 4가지 종류의 토핑이 올려져 있다고 합시다. 토핑들을..

Tistory

20056번: 마법사 상어와 파이어볼 (시간초과 실패) - Kotlin

20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 문제 어른 상어가 마법사가 되었고, 파이어볼을 배웠다. 마법사 상어가 크기가 N×N인 격자에 파이어볼 M개를 발사했다. 가장 처음에 파이어볼은 각자 위치에서 이동을 대기하고 있다. i번 파이어볼의 위치는 (ri, ci), 질량은 mi이고, 방향은 di, 속력은 si이다. 위치 (r, c)는 r행 c열을 의미한다. 격자의 행과 열은 1번부터 N번까지 번호가 매겨져 있고, 1번 행은 N번과 연결되어 있고, 1번 열은 N번 열과 ..

Tistory

Brute Force (완전탐색)

브루트 포스(Brute Force) 알고리즘이란? 우리가 완전탐색이라고도 부르는 브루트 포스 알고리즘은 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법이다. 엄청난 시간이 걸리는 데다 자원이 엄청나게 들어 무식한 방법이라고 할 수 있지만 100%로 완전 탐색할 수 있다는 장점이 있다. 이론적으로 가능한 모든 경우의 수를 다 검색하보는 것이라 암호학에서는 가장 확실한 방법으로 통용되고 있다. 브루트 포스는 크게 선형 구조와 비선형 구조로 나눌 수 있다. 선형 구조: 순차 탐색 비선형 구조: 백트래킹, DFS, BFS 우리는 이런 구조를 가지고 많은 알고리즘 문제를 해결해야 한다. 그러므로 우리는 이런 구조에 대한 이해를 확실하게 해서 해당하는 알고리즘 문제에 가장 알맞은 구조를..

Tistory

15683번: 감시

15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 문제 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감시할 수 있는 방법은 다음과 같다. 1번 2번 3번 4번 5번 1번 CCTV는 한 쪽 방향만 감시할 수 있다. 2번과 3번은 두 방향을 감시할 수 있는데, 2번은 감시하는 방향이 서로 반대방향이어야 하고, 3번은 직각 방향이어야 한다. 4번은 세..

Tistory

2638번: 치즈 - Kotlin (DFS)

2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net 문제 N×M의 모눈종이 위에 아주 얇은 치즈가 과 같이 표시되어 있다. 단, N 은 세로 격자의 수이고, M 은 가로 격자의 수이다. 이 치즈는 냉동 보관을 해야만 하는데 실내온도에 내어놓으면 공기와 접촉하여 천천히 녹는다. 그런데 이러한 모눈종이 모양의 치즈에서 각 치즈 격자(작 은 정사각형 모양)의 4변 중에서 적어도 2변 이상이 실내온도의 공기와 접촉한 것은 정확히 한시간만에 녹아 없어져 버린다. 따라서 아래 모양과 같은 치즈(회색으로 표시된 ..

Tistory

16235번: 나무 재테크 - Kotlin

16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 문제 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수이다. r과 c는 1부터 시작한다. 상도는 전자통신공학과 출신답게 땅의 양분을 조사하는 로봇 S2D2를 만들었다. S2D2는 1×1 크기의 칸에 들어있는 양분을 조사해 상도에게 전송..

Tistory

두 큐 합 같게 만들기 - Kotlin

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 길이가 같은 두 개의 큐가 주어집니다. 하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업을 통해 각 큐의 원소 합이 같도록 만들려고 합니다. 이때 필요한 작업의 최소 횟수를 구하고자 합니다. 한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주합니다. 큐는 먼저 집어넣은 원소가 먼저 나오는 구조입니다. 이 문제에서는 큐를 배열로 표현하며, 원소가 배열 앞쪽에 있을수록 먼저 집어넣은 원소임을 의미합니다. 즉, pop을 하면 배..

Tistory

3190번: 뱀 - Kotlin

3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. 먼저 뱀은..

Tistory

16236번: 아기 상어 - Kotlin (BFS)

16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 문제 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가지고 있고, 이 크기는 자연수이다. 가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다. 아기 상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없고, 나머지 칸은 모두 지나갈 수 있다. 아기 상어는 자신의..

1 2 3