Algorithm

[백준(파이썬/Python)] 1062_가르침

https://www.acmicpc.net/problem/1062 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net 이 문제에서 'a','n','t','i','c'는 반드시 가르쳐야 하고, 모든 단어의 맨 처음 네 글자가 'anta', 'tica'라는 조건은 아마 시간 복잡도를 맞추기 위한 설정이거나 약간의 구현(?)을 유도하기 위한 것 같습니다. 하지만 기본적으로 단어의 개수나 알파벳의 수가 크지 않기 때문에 완전 탐색을 해야겠다는 생각을 할 수 있었고, 다만 조금이나마 효율적인 완전탐색을 하기 위한 ..

2021.08.07 게시됨

Algorithm

[프로그래머스(파이썬/Python)] 점프와 순간 이동

https://programmers.co.kr/learn/courses/30/lessons/12980 코딩테스트 연습 - 점프와 순간 이동 OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈 programmers.co.kr Greedy하게 접근하면 쉽게 풀 수 있는 문제입니다. 아래 풀이의 주석에서 설명한 것처럼 (짝수번 째 칸 * 2)한 지점까지의 에너지 소모량은 0이고, 홀수 칸에서 짝수칸을 가기 위해서는 +1을 점프해주면 되기 때문에 이를 역으로 구현해주었습니다. ps. 처음에는 DP라고 생각해서 풀었는데, 정답은 맞지만 n이 1억 이하의 범위라서 DP..

2021.08.04 게시됨

Spring & Springboot

[스프링/Spring] 스프링(Spring)은 왜 만들어졌는가?

🏃 0. 들어가면서 정말 많은 기업에서 스프링을 쓰고 있습니다. 그리고 저도 스프링을 공부하고 있습니다. 스프링이 무엇이길래, 어떤 점이 좋기에 개발 생태계에서 정말 중요한 프레임워크로 자리매김했을까요? 이번 글에서는 스프링은 왜 만들어졌고, 어떤 가치관이 그 안에 있는지 정리해보려고 합니다. 🌼 1. 스프링의 탄생 2002년, 스프링은 말그대로 '봄'이라는 메시지를 개발자들에게 전하며 찾아왔습니다. 스프링이 등장하기 이전에는 EJB(Enterprise Java Bean)가 기업 환경의 시스템을 구현하기 위한 컴포넌트로 역할을 해왔는데, 당시에는 일반적으로 JAVA EE의 API로 사용자가 볼 수 있는 Front 로직은 JSP가, Back 로직은 EJB가 구현하는 구조로 구성되었습니다. 그리고 EJB를 ..

2021.08.02 게시됨

Java & Kotlin

[자바/JAVA] 생성자(Constructor)

생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'입니다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용되죠. 사실 생성자는 자바를 사용한다면 누구나 무의식적으로 쓰는 개념입니다. 그럼에도 불구하고, 몇 가지 기본적인 개념에 대해서는 한 번 짚고 넘어가면 좋을 것 같아서 정리해보겠습니다. 1. 기본 생성자(Default Constructor) 자바 코드를 컴파일 할 때, 소스파일(*.java)의 클래스에 생성자가 하나도 정의되어 있지 않은 경우 컴파일러는 자동적으로 아래처럼 같은 내용의 기본 생성자를 추가하여 컴파일합니다. class Data{ Data(){ } // Default Constructor int value; } 단..

2021.08.02 게시됨

Java & Kotlin

[자바/Java] 오버로딩(Overloading)

🏃 0. 들어가면서 자바의 가장 큰 무기 중 하나는 다형성(polymorphism)입니다. 다형성을 풀어서 설명해보면 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작할 수 있는 것을 의미한다고 볼 수 있습니다. 이번 글에서는 '다형성을 어떻게 확보할 수 있는가'에 대한 방법으로 오버로딩(Overloading)에 대한 공부를 해보겠습니다. 📃 1. 오버로딩(Overloading)이란? If a class has multiple methods having same name but different in parameters, it is known as Method Overloading 하나의 클래스 안에 같은 이름을 갖지만 다른 파라미터를 가지는 여러 개의 메서드가 존재하면, 이를 메서드 오버..

2021.08.02 게시됨

Algorithm

[백준(파이썬/Python)] 2638_치즈

https://www.acmicpc.net/problem/2638 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net 이 문제의 핵심은 내부 치즈인가 아닌가를 어떤 방식으로 판단할 것인가입니다. 처음 문제에 접근했을 때는"모든 지점에 대하여 내부 치즈인가를 BFS 탐색을 하였고, 만약 가장자리에 도착할 수 있으면 내부 치즈가 아니다"라고 생각했습니다. 하지만 그렇게 되면 모든 위치마다 일일이 체크를 해줘야 하기 때문에, 시간복잡도에서 불리할 수밖에 없습니다. 이를 해결하기 위해서는 반대로 "가장 자리..

2021.08.01 게시됨

Algorithm

[백준(파이썬/Python)] 2096_내려가기

https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net - 풀이 자체는 어렵지 않은데 문제의 메모리 제한이 상당히 타이트합니다. - 현재 계단에서 점수의 최대, 최소는 그 전 계단까지의 최대 최소에만 영향을 받기 때문에 모든 계단의 점수값을 미리 배열로 만들어두면 메모리 초과가 발생합니다. - 따라서, 계속해서 각 시점에서 인풋값을 읽고 최적해를 갱신해나가는 방향으로 문제를 풀어야합니다. 문제 풀이의 DP 로직은 첫번째, 두번째, 세번째 계단에 있을 때를 따로 생각..

2021.08.01 게시됨

Algorithm

[프로그래머스(파이썬/Python)] 가장 긴 팰린드롬

https://programmers.co.kr/learn/courses/30/lessons/12904 코딩테스트 연습 - 가장 긴 팰린드롬 앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들 programmers.co.kr 아래 코드에서 설명한 두 개의 주석이 핵심입니다. 1. 팰린드롬 문자열인지 확인할 때는 포인터 두 개를 두고(투 포인터) 왼쪽 끝과 오른쪽 끝이 일치하는지 확인하면 됩니다. left < right까지 문자열이 일치한다면 팰린드롬이죠(스터디를 하다가 str == str[::-1]로 팰린드롬을 확인할 수 있다는 ..

2021.08.01 게시됨

Algorithm

[백준(파이썬/Python)] 1967_트리의 지름

https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net 백준 1167번 트리의 지름 문제와 완벽하게 동일해서 해당 문제에 대한 풀이를 참고하면 될 것 같습니다. [백준(파이썬/Python)] 1167_트리의 지름 https://www.acmicpc.net/problem/1167 1167번: 트리의 지름 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개..

2021.08.01 게시됨

Algorithm

[백준(파이썬/Python)] 1256_사전

https://www.acmicpc.net/problem/1256 1256번: 사전 첫째 줄에 N, M, K가 순서대로 주어진다. N과 M은 100보다 작거나 같은 자연수이고, K는 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net - 고민을 정말 많이 한 문제입니다. 이틀정도 고민을 하다가 카테고리를 봤고 DP 카테고리인 것을 알았지만 이 문제에서 DP를 어떻게 적용하나싶었고... 결국 원래 생각하던 방식으로 문제를 해결했습니다. - 문제를 푸는 아이디어는 아래와 같습니다. 1) 0과 1이 각각 3개씩 존재한다고 생각해보면, 사전에서 가장 앞에 오는 경우는 000111입니다. 그리고 사전에 가장 마지막에 오는 문자는 111000입니다. 2) 만약 맨 앞에 0을 배치한다고..

2021.07.29 게시됨