Algorithm

[프로그래머스] 괄호 회전하기

코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 올바른 괄호 문자열인지 확인하는 함수는 스택을 이용하여 작성했고, 메인 solution 함수에서는 문자열을 회전하면서 올바른 괄호열 때 answer를 1씩 증가시키도록 했습니다. [풀이] # 올바른 괄호 문자열인지 확인하는 함수 def isValidBusket(str): stack = [] for s in str: if len(stack) == 0: stack.append(s) else: # 스택 마지막 원소가 여는 괄호이면서 현재 문자는 닫는 괄호 if stack[-1] in bucketDict and s not in bucketDict: # 두 괄호가 매치되지 않으면 False if s != bucketDict[stack[-1]]: r..

2021.07.13 게시됨

Algorithm

[프로그래머스(Programmers)] 게임 맵 최단거리

https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr BFS로 풀 수 있는 전형적인 문제입니다. 최단거리를 구해야하기 때문에 너비 우선 탐색을 진행해주고 도착점에서 결과값이 1이면 거리가 갱신되지 못한 것이므로 -1을 리턴하고, 그 외에는 도착점의 값을 리턴해주면 됩니다. [풀이] from collections import deque dx, dy = [1,-1,..

2021.07.12 게시됨

Java & Kotlin

[JAVA] 기본형 매개변수와 참조형 매개변수

1. 들어가면서 이번 시간에는 자바의 기본형 매개변수와 참조형 매개변수에 대해 알아보려고 합니다. 변수의 타입에 대해 공부했을 때 기본형(Primitive)와 참조형(Reference) 변수에 대해 살펴봤는데, 각각의 변수 타입이 매개변수로 입력될 때 어떻게 다른지 구체적으로 살펴보겠습니다. 2. 개념 자바에서는 메서드를 호출할 때 매개변수로 지정한 값을 메서드의 매개변수에 복사해서 넘겨줍니다. 매개변수의 타입이 기본형(Primitive type)일 때는 기본형 값이 복사되겠지만, 참조형(reference type)이면 인스턴스의 주소가 복사되죠. 따라서, 메서드의 매개변수를 기본형으로 선언하면 단순히 저장된 값만 얻지만 참조형으로 선언하면 값이 저장된 곳의 주소를 알 수 있기 때문에 값을 읽어 오는 것..

2021.07.11 게시됨

Algorithm

[프로그래머스] 쿼드압축 후 개수 세기

https://programmers.co.kr/learn/courses/30/lessons/68936 코딩테스트 연습 - 쿼드압축 후 개수 세기 [[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15] programmers.co.kr - 백준에 있는 쿼드트리 압축 문제와 거의 똑같은 문제다. 각 구간의 시작점과 길이를 생각하는 것이 포인트인데, 이 문제에서는 2의 거듭 제곱수 형태를 하고 있으므로 재귀 호..

2021.07.11 게시됨

Java & Kotlin

[JAVA] public static void main?

자바의 메인 메서드는 public static void main(String[] args)로 시작하는데요. public, static, void라는 각각의 키워드에 대한 이해가 있으신 분들은 왜 메인 함수가 위와 같은 형태를 가져야하는지 짐작하실 수 있을겁니다. 하지만 자바를 처음 공부하시거나 한 번도 이 메인 함수의 구조에 대해 생각을 안해보신 분이라면 약간 당황(?)스러운 질문일 것 같아 오늘은 이 메인 함수 구조에 대한 해석을 한 번 해보려고 합니다. 1. public public, private, protected 같은 키워드는 접근 지정자 또는 접근 제한자라고 부릅니다. 이 중에서 public은 제한없이 어디에서나 사용이 가능하다는 뜻이죠. 반면, protected는 동일한 패키지 내에서나 상속..

2021.06.20 게시됨

Java & Kotlin

[JAVA] 가비지 컬렉션(Garbage Collection, GC)에 대한 이해

0. 들어가기 전에 자바 가비지 컬렉터(GC)에 대해 설명하기 전에 스택과 힙 영역에 대해 잠깐 짚고 넘어가려고 하는데요. 이 부분을 모른 채로 GC를 이해하는 것이 좀 어려울 것 같다고 생각합니다. 1) 스택(Stack) 영역 이전에 JVM에 대한 글을 썼을 때, JVM은 스택 기반 가상 머신이며 효율적인 연산과 메모리 사용이 가능하다는 이야기를 했었습니다. 그러면 스택에는 무언가 연산을 할 대상이 담겨있어야 하지 않을까요? [JAVA] JVM과 자바 코드의 동작 1. JVM이란 무엇인가? JVM(JAVA Virtual Machine)은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행해주도록 하는 가상 머신입니다. JVM은 JAVA와 OS 사이에서 중개자 역할을 하는 stud..

2021.06.20 게시됨

Java & Kotlin

[JAVA] Enum 클래스에 대한 이해

0. 문제 제기 자바 1.5 버전 이전에는 상수를 선언할 때는 해당 클래스 내부에 final static Strirng, final static int와 같은 방식을 사용했습니다. 하지만 이런 방식의 상수 정의는 상수의 개수가 많아질수록 가독성이 떨어지고, 어떤 것에 관한 상수인지 파악하기도 어려워지는 단점이 있었습니다. 따라서 이런 상수들을 용도에 맞게 모아서 사용하기 위한 클래스나 인터페이스를 정의하기도 했는데 이러한 방식 역시 몇 가지 문제점을 안겨주고 있었습니다. 예시를 한 번 보겠습니다. interface UNIVERSITY{ int SEOUL = 1; int YONSEI = 2; int KOREA = 3; } interface MAJOR{ int KOREAN = 1; int MATH = 2; ..

2021.06.20 게시됨

Java & Kotlin

[JAVA] 예외 처리를 어떻게 해야할까? - (2)

0. 들어가면서 이전 포스팅에서 자바 예외처리 기본 개념과 예외처리를 어떻게 해야하는가에 대한 이야기를 했습니다. [JAVA] 예외 처리를 어떻게 해야 할까 If문, try/catch문은 무엇이 다른가요? 0. 들어가면서 if 조건문을 쓰는 이유는 무엇인가요? try/catch문을 쓰는 이유는 무엇인가요? 이번 글에서는 if문과 try/catch문의 차이에 대해 간략히 알아보고, 예 studyandwrite.tistory.com 오늘은 자바의 예외 처리에 대한 몇 가지 내용을 더 공부해보려고 합니다. 1. throw와 throws 1-1) throw 아래 예시는 throw를 통해서 일부러 예외를 발생시킵니다. 개발자의 의도한 방향이 아닌 방향으로 사용자가 프로그램을 동작하면 이에 대해 일부러 Except..

2021.06.20 게시됨

Java & Kotlin

[JAVA] 인터페이스(Interface)의 기본 개념과 Java 8 이후의 변화

0. 인터페이스(Interface) 인터페이스는 자바의 다형성(Polymorphism)을 극대화하여 객체지향프로그래밍을 더 수월하게 해주는 역할을 합니다. 인터페이스를 통해 객체는 추상화에 더 의존하게 되고, 이에 따라 프로그램의 유지 보수가 용이해집니다. 1. 인터페이스 정의하기 인터페이스의 구성요소는 크게 상수 필드, Abstract 메서드, Default 메서드, Static 메서드, Private Method가 있습니다. 상수 필드는 인터페이스에서 정의한 상수를 클래스에서 그대로 값만 참조하여 사용할 수 있게 하고, Abstract 메서드는 인터페이스 구현 클래스에서 직접 오버라이딩해서 구현해야 하는 메서드(빈 껍데기)를 말합니다. Default 메서드는 인터페이스에서 기본적인 메서드 내용을 정의..

2021.06.19 게시됨

Java & Kotlin

[JAVA] 다형성과 상속, 그리고 객체지향

1. 다형성과 상속에 대한 이해 Polymorphism in Java is the ability of an object to take many forms. To simply put, polymorphism in java allows us to perform the same action in many different ways. 다형성(Polymorphism)은 자바에서 한 객체가 여러 모습으로 기능할 수 있음을 의미합니다. OOP에서 핵심적인 역할을 수행하는 녀석이 다형성이라고 볼 수 있죠. 그리고 오늘 공부할 상속(Inheritance)는 어떻게 보면 다형성을 달성할 수 있도록 도와주는 녀석이라고 생각합니다. 그리고 상속을 공부하면서 나오는 메서드 오버라이딩(Method Overriding)이 한 객체..

2021.06.19 게시됨