
오늘은 2장에 이어 스칼라 두번째 걸음을 학습해 보도록 하겠습니다. 이번장에서는 배열과 튜플같은 자료형을 익히고 함수형 스타일을 알아보는 시간이 될 것 같습니다. 2,3 장을 한번 훑어보고 뒤에서 더욱 자세히 배워 나간다면 스칼라에 대해 이해하기 수월할 것입니다. 7단계 : 배열에 타입 파라미터를 지정해보자. val big = new java.math.BigInteger("12345") new를 사용하여 객체를 인스턴스화 합니다. 객체를 인스턴스화 할 때, 값과 타입을 파라미터로 넘길 수 있습니다.(이를 파라미터화, Parameterization라고 합니다.) val 배열은 변경이 불가능하지만 원소는 변경이 가능합니다. 아래의 예시처럼 Array안의 원소는 변경이 가능합니다. val greetString..

오늘은 2장 스칼라 첫걸음을 학습해 보도록 하겠습니다. 이번장과 다음장 3장까지 스칼라의 전반적인 내용을 살펴 봅니다. 간단하게 알고 넘어가지 좋은 부분이니 가벼운 마음으로 학습해 보겠습니다. 1단계: 스칼라 인터프리터 사용법을 익히자 ※ 스칼라 인터프리터란? 스칼라 표현식과 프로그램을 쓸 수 있는 대화형 셸(Shell)로, 스칼라의 대화형 셸은 scala라고 부릅니다. scala> 1 + 2 res0: Int = 3 계산 결과 값의 이름은 res0으로 0번째 결과라는 뜻 결과의 타입 → Int 입력 표현식을 계산해서 얻은 결과값 → 3 Int 타입은 scala 패키지의 Int 클래스를 의미합니다. 'res번호' 식별자(identifier)는 나중에 재사용할 수 있습니다. 아래 예시에서 확인할 수 있습니..
회사에서 스칼라를 사용하여 개발을 진행하게 되어, 스칼라에 대해 학습해 보려고 합니다. 회사에서 스터디도 진행하고 있지만 그래도 혼자 공부하고 정리해 놔야 더 도움이 될거 같아 기록으로 남겨 놓겠습니다. 학습은 회사에서 추천해준 책인 Programming in scala 라는 책으로 진행하였습니다. 오늘은 1장 기초가 되는 부분부터 집고 넘어가도록 하겠습니다. 스칼라(Scala)라는 이름은 확장 가능(Scalable)언어 라는 뜻입니다. 우리는 스칼라를 사용해서 작은 스크립트를 작성하는 일부터 커다란 시스템을 구축하는 일까지 광범위한 프로그래밍 과업을 할 수 있습니다. 스칼라는 표준 자바 플랫폼에서 실행할 수 있고, 모든 자바 라이브러리와 매끈하게 연동할 수 있습니다. 기술적으로, 스칼라는 객체지행(ob..
오늘은 JVM의 대한 개념이 부족한 것 같아 이 부분에 대해 학습해 보려고 한다. JVM이란 무엇은 하는 것인지, 필요한 부분들을 하나씩 알아보자. 1. JVM(Java Virtual Machine) 이란? 자바 가상 머신은 자바 바이트코드(.class)를 실행할 수 있는 주체이다. 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다. 자바가 컴파일 되어 바이트코드, 즉 class 파일을 만들면 이 코드가 자바 가상 머신 환경에서 실행된다. 정리해 보면 바이트코드(.class)가 어느 운영체제에서든 돌아갈 수 있도록 해 주는 것이 JVM의 역할이라는 뜻이다. 참고로 JVM은 JRE(Java Runtime Environment)에 포함되..
이번에는 다이나믹 프로그래밍에 대해 알아보도록 하겠습니다. 저는 이부분을 공부하면서 진짜 공식 짜고 생각하는 과정이 진짜 알고리즘 답다고 느꼈습니다. 좀 어렵긴한데 공식이 들어맞았을 때 가장 희열이 느껴지는 것 같습니다. ▶ 메모이제이션 기법 한 번 구한 결과를 메모리 공간에 메모해 두고 같은 식을 다시 호출하면 메모한 결과를 그대로 가져오는 기법입니다. 탑다운(메모이제이션), 보텀업 방식 두가지가 있습니다. DF에서 가장 많이 예시로 드는 문제는 피보나치 수열 문제입니다. 이 문제의 구현을 보면서 하나씩 알아보도록 하겠습니다.. 1. 탑다운(Top Down) 이 방법은 별로 추천하지 않으니 사용하지 말도록 합시다. 그래도 학습차원에서 무엇인지는 알아봅시다. d = [0]*100 def fibo(x): ..
이번에는 이진 탐색에 대해 알아보겠습니다. 이진 탐색은 대체로 검색 범위가 어마어마하게 많을 경우 사용합니다. 시간을 절약(?) 하기 위해 사용하는 느낌인 것 같습니다. 이진 탐색보다는 일반적으로 순차 탐색을 했었는데, 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법입니다. 하지만 이럴 경우 데이터가 많아지면 시간이 너무 오래 걸린다는 단점이 있어서 그럴 경우 이진 탐색을 사용합니다. 이 녀석도 알고리즘을 외워두면 조금 편하게 사용할 수 있습니다. 이제 이진 탐색에 대해 알아보도록 합시다. 1. 이진 탐색(binary search) 간단히 말해서 반으로 쪼개면서 탐색하는 알고리즘입니다. 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있습니다. 변수 3개(..
오늘은 최단 경로 알고리즘을 공부해 보려고 합니다. 최단 경로 알고리즘이란 말 그대로 가장 짧은 경로를 찾는 알고리즘입니다. 일명 길 찾기 문제라고 불립니다. 최단 경로 알고리즘은 크게 두가지 종류로 나눌수 있는데 아래와 같습니다. 다익스트라 알고리즘 플로이드 워셜 알고리즘 이 두 알고리즘에 대해 알아보겠습니다. 1. 다익스트라 알고리즘 그래프에서 여러개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘입니다. 우선순위 큐를 사용하고 우선순위가 가장 높은 데이터를 가장 먼저 삭제합니다. heapq 을 사용하며, (거리, 노드) 형태의 튜플 자료형을 이용합니다. 코드로 확인해 보면 아래와 같습니다. import heapq INF = int(1e9) # n:..

오늘은 알고리즘 중에서도 어렵다고 유명한 DFS와 BFS에 대해 공부해 보려고 합니다. 그런데 막상 공부하고 보니 이 두 알고리즘은 일단 외우고 시작하는 게 가장 좋은 것 같습니다. 실제로 이와 비슷한 문제를 마주치면 이 알고리즘을 구현해 놓고 수정하는 방법으로 진행해도 좋을 것 같습니다. 1. DFS(Depth-First-Search, 깊이 우선 탐색) 그래프의 깊은 부분을 우선적으로 탐색하는 알고리즘입니다. 구현은 아래와 같이 하면 됩니다. def dfs(graph, v, visited): visited[v] = True print(v, end=' ') for i in graph[v]: if not visited[i]: dfs(graph, i, visited) graph = [ [], [2, 3, 8..