주사위 굴리기 시간 제한메모리 제한제출정답맞은 사람정답 비율2 초512 MB184853844333.258%문제크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 2 4 1 3 5 6주사위는 지도 위에 윗 면이 1이고, 동쪽을 바라보는 방향이 3인 상태로 놓여져 있으며, 놓여져 있는 곳의 좌표는 (x, y) 이다. 가장 처음에 주사위에는 모든 면에 0이 적혀져 있다.지도의 각 칸에는 정수가 하나씩 쓰여져 있다. 주사위를 굴렸을 때, 이동한 칸에 써 있는 수가 0이면, 주사위의 바닥면에 써 ..
Docker 실습 환경Dev OS :Mac OS Sierra Terminal : iTerm 본 포스팅은 Docker networking 설정으로 Docker 컨테이너(?) 끼리 네트워크 환경을 구성합니다. 기본적인 Docker의 활용은 박재성님의 Docker 유튜브 강의를 참고하면 도움이 될 것 같습니다. Dockerfile 세팅 먼저 실습에 사용할 Docker 이미지와 세팅을 덜 귀찮게 하기 위해 Dockerfile을 세팅 할 계획입니다. Docker로 가상 컨테이너를 올리면 거기에 우분투 설치하고 우분투 설치 후엔 환경설정해주고 필요한 프로그램들 깔고 너무 귀찮죠... 하지만 Dockerfile에 해당 내용들을 작성 후 Docker build 를 하면 우리가 원하는 서버 환경을 손쉽게 세팅 할 수 있..
Spring Boot Project 개발 환경 Dev OS : Mac Sierra 10.12.3 IDE : IntelliJ IDEA 2016.2.4 Build #IU-162.2032.8, built on September 9, 2016 java : jdk 1.8 본 게시글은 박재성님의 spring-boot, JPA 질문/답변 게시판 만들기 영상을 공부하며 작성 하였습니다. IDE만 다르게 IntelliJ로 사용해 STS 사용하신 분들은 유튜브에 인강 보는것을 추천합니다. Spring Boot Project InitIntelliJ를 실행 후 Create New Project 로 새로운 프로젝트를 생성합니다. Spring Initializr 를 선택 후 next 버튼을 누릅니다. Name : 프로젝트 이름 ..
01 : 반복에서 스트림 연산으로컬렉션을 처리할 때 보통은 요소들을 순회하며 값에 접근한다. 예를 들면 책에서 모든 긴 단어의 수를 고려하는 예제를 살펴보자 123String contents = new String(Files.readAllBytes( Paths.get("alice.txt")), StandardCharsets.UTF_8);List words = Arrays.asList(contents.split("[\\P{L}]+")); "alice.txt"에 있는 단어를 words 리스트에 넣었다. 1234int count = 0;for(String w : words){ if(w.length() > 12) count++;} 단어의 길이가 12이상인 단어의 개수를 세는 전통적인 순회 방식이다. 하지만 이 ..
08 : 인터페이스의 정적 메서드 일반적으로 인터페이스를 동반하는 클래스들에 정적 메서드를 두었다. 자바 표준 라이브러리에서 Collection/Collections 또는 Path/Paths 같은 인터페이스와 유티리티 클래스 쌍이 대표적이다. Paths 클래스를 살펴보자. 이 클래스는 몇 가지 팩토리 메서드(Factory method)만 포함하고 있다. Paths.get("jdk1.8.0", "jre", "bin")처럼 일련의 문자열로부터 경로(Path)를 만들 수 있다. 자바 8에서는 Path 인터페이스에 이 메서드를 추가할 수도 있었다. 123456public interface Path{ public static Path get(String first, String ... more){ return F..
06 : 변수 유효 범위 람다 표현식에 유효한 변수에 접근하고자 할때는 어떻게 할까? 다음 예제를 한번 보자 123456789public static void repeatMessage(String text, int count){ Runnable r = () ->{ for (int i = 0; i { while(count > 0) { count--; //오류 : 캡처한 변수는 변경 불가능 System.out.println(text); Thread.yield(); } }; new Thread(r).start();} 람다 표현식에서 변수를 변경하는 작업은 스레드에 안전하지 않다. 일변의 병행 작업이 존재 하고, 각 작업에서 공유 카운트를 업데이트 한다면 문제가 생길 것이다. 12345int matches = ..
05 : 생성자 레퍼런스생성자 레퍼런스 사용 방식메서드의 이름이 new라는 점을 제외 하면 메서드 레퍼런스와 사용 방식이 유사하다. 예를 들면, Button::new는 Button 생성자를 가리키는 레퍼런스이다. 하지만 어느 생성자를 가르키는지는 문맥에 따라 다르다고 한다. 123List labels = ...;Stream stream = labels.stream().map(Button::new);List buttons = stream.collect(Collectors.toList()); 문자열 리스트가 있다고 하면, 다음과 같은 호출을 이용해 각 문자열을 대상으로 생성자를 호출 함으로써 문자열 리스트를 버튼 배열로 변환한다. map 메서드가 리스트의 각 요소를 대상으로 Button(String) 생성자..
재귀 호출과 완전 탐색재귀 호출완전히 같은 코드를 반복해 실행하는 작업을 구현할때 사용 하는 개념. 자신이 수행할 작업을 유사한 형태의 여러 조각으로 쪼갠 뒤 그 중 한 조각을 수행하고, 나머지 부분에서 자기 자신을 호출 한다. 예를 들면 자연수 n이 주어 졌을때 1 부터 n까지의 합을 반환하는 sum()이란 함수를 for 문과 재귀함수로 구현해 보자. 12345678910111213141516//코드 1 부터 n 까지의 합을 계산하는 반복 함수와 재귀 함수//필수 조건 : n >= 1//결과 : 1 부터 n 까지의 합을 반환int sum(int n){ int ret = 0; for(int i = 1; i = 1//결과 : 1 부터 n 까지의 합을 반환한다.int recursiveSum(int n){ i..
04 : 메서드 레퍼런스메서드 레퍼런스 사용방식 다른 코드에 전달하려는 액션을 수행하는 메서드가 이미 존재할 수 도 있다. 예를 들면, 버튼을 클릭할때 마다 단순히 이벤트 객체를 출력하고 싶은 경우이다. 1button.setOnAction(event -> System.out.println(event)); 하지만 setOnAction 메서드에 println 메서드만 전달할 수 있다면 더 간편할 것이다. 1button.setOnAction(System.out::println); System.out::println 표현식은 x -> System.out.println(x)에 해당하는 메서드 레퍼런스 이다. :: 연산자를 이용해 객체 또는 클래스와 메서드 이름을 구분하며 사용한다. 1. object::instan..