OSI 7 Layers란? OSI 프로토콜은 국제표준화기구(International Organization for Standardization, ISO)에서 만든 프로토콜 입니다. OSI 프로토콜은 서로 다른 컴퓨터 간의 통신 기능을 7 Layer로 구분하여 각 계층마다 표준화된 서비스와 프로토콜을 규정한 모델이고 우리가 꼭 알아두어야 할 프로토콜입니다. 하지만 실제로는 사용되지 않고 이론적으로만 우리가 참조하고 공부하는 모델이고 그래서 참조 모델이라고도 부릅니다. 전 세계에서 가장 많이 사용하는 프로토콜은 TCP/IP 프로토콜이고 이 프로토콜은 표현 계층과 세션 계층이 응용(Application) 계층 하나로 합쳐져있습니다. 네크워크를 계층으로 나눈 이유? 네트워크는 많은 요소들로 구성되어 복잡합니다...
안녕하세요. 오늘은 fold()와 reduce()에 대해 정리하겠습니다. 1. fold() fold() 함수의 구현 public inline fun IntArray.fold(initial: R, operation: (acc: R, Int) -> R): R { var accumulator = initial for (element in this) accumulator = operation(accumulator, element) return accumulator } fold()함수는 내부 요소들을 모두 돌아가며 operation을 수행한 결과를 반환합니다. reduce()와의 차이점은 초기값을 설정할 수 있고, emptyList여도 Exception을 던지지 않습니다. import org.assertj.cor..
쉘이란? 쉘(Shell)은 스크립트 언어로 명령어의 해석을 통해 사용자와 리눅스 커널 사이에서 중간자 역할을 수행합니다. 윈도우에서의 프롬프트 명령어를 실행하는 것과 비슷해 보이지만 리눅스의 쉘은 더 강력한 기능을 제공합니다. 쉘 명령어로 구성된 쉘 스크립트 프로그램을 작성하면 쉘이 스크립트 파일을 읽어 일련의 명령을 수행할 수 있습니다. 쉘은 운영체제의 일부이며 커널과는 분리된 프로그램입니다. 쉘의 종류에 따라 alias 설정, 초기화 파일, 스크립트 작성 등에서 다른 특성을 가질 수 있습니다. 리눅스 사용자는 자신이 선호하는 쉘을 기본 쉘로 설정하여 사용할 수 있으며 가장 많이 사용하는 언어는 배쉬(Bash) 쉘입니다. 현재 쉘 확인 $ grep cent /etc/passwd seunghwan:x:5..
문제 N×M크기의 배열로 표현되는 미로가 있다. 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다. 위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다. 입력 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력..
문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. 입력 첫 번째 줄에는 지도의 크기 N(정사각형이므로 가로와 세로의 크기는 같으며 5≤N≤25)이 입력되고, 그 다음 N줄에는 각각 N개의 자료(0혹은 1)가 입력된다. 출력 첫 번째 줄에는 총 단지수를 출력하시오. 그리고 각..
문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지, 그 최소 일수를 알고 싶어 한다. 토마토를 창고에 보관하는 격자모양의 상자들..
https://www.acmicpc.net/problem/1926 문제 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로로 연결된 것은 연결이 된 것이고 대각선으로 연결이 된 것은 떨어진 그림이다. 그림의 넓이란 그림에 포함된 1의 개수이다. 입력 첫째 줄에 도화지의 세로 크기 n(1 ≤ n ≤ 500)과 가로 크기 m(1 ≤ m ≤ 500)이 차례로 주어진다. 두 번째 줄부터 n+1 줄 까지 그림의 정보가 주어진다. (단 그림의 정보는 0과 1이 공백을 두고 주어지며, 0은 색칠이 안된 부분, 1은 색칠이 된 부분을 의미한다) 출력 첫째 줄에는 그림의 개수, ..
코틀린의 Spread Operator *는 배열을 단순 나열할 때 사용합니다. *list의 의미 -> list의 요소들을 단순 나열하겠다. 라는 의미입니다. 사용 예시 array에 담겨있는 데이터들을 array2에 추가를 해 넣는다고 생각을 해봅시다. 아래 주석처리된 코드처럼 array에 저장되어있는 데이터들을 일일히 넣어주는 방법도 있겠지만 나중에 데이터가 100개, 1000개 이상 쌓인다면 어떻게 해야할까요? 이런 경우를 위해서 코틀린에서는 Spread Operator를 제공합니다. val array = arrayOf("aa", "bb", "cc") //val array2 = arrayOf(array[0], array[1], array[2], "dd", "cc") val array2 = arrayOf..
gradle.properties가 존재하는지 확인 home 경로에 gradle.properties가 존재하는지 확인해줍니다. 예를 들어, 제 맥북에서의 경로는 /Users/seunghwan(home)/.gradle 였습니다. Gradle user home 위치 확인 AndroidStudio -> Preferences -> Build, Execution, Deployment -> Gradle의 Gradle user home 위치를 확인해줍니다.