직사각형 종이를 n번 접으려고 합니다. 이때, 항상 오른쪽 절반을 왼쪽으로 접어 나갑니다. 다음은 n = 2인 경우의 예시입니다. 먼저 오른쪽 절반을 왼쪽으로 접습니다. 다시 오른쪽 절반을 왼쪽으로 접습니다. 종이를 모두 접은 후에는 종이를 전부 펼칩니다. 종이를 펼칠 때는 종이를 접은 방법의 역순으로 펼쳐서 처음 놓여있던 때와 같은 상태가 되도록 합니다. 위와 같이 두 번 접은 후 종이를 펼치면 종이에 접은 흔적이 생기게 됩니다. ∨ 모양이 생긴 부분은 점선(0)으로, ∧ 모양이 생긴 부분은 실선(1)으로 표시했습니다. 종이를 접은 횟수 n이 매개변수로 주어질 때, 종이를 절반씩 n번 접은 후 모두 펼쳤을 때 생기는 접힌 부분의 모양을 배열에 담아 return 하도록 solution 함수를 완성해주세요..
AOP란 Aspect Oriented Programming의 약자로 보통 관점 지향 프로그래밍으로 번역되며 관점과 함께 기능이나 관심으로 번역될 수 있다. 여러 객체의 핵심 기능과 공통 기능의 구현을 분리함으로써 핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적용할 수 있도록 하고, 재사용성을 높여준다. 스프링은 런타임에 프록시 객체를 생성해 공통 기능을 삽입하는 방식으로 AOP를 구현한다. 이러한 구현 방식 이외에 핵심 기능에 공통 기능을 삽입하는 방법에는 두 가지가 더 있다. 이는 스프링 AOP에서는 지원하지 않으며 AspectJ와 같은 AOP 전용 도구를 사용해서 적용할 수 있다. 컴파일 시점에 코드에 공통 기능을 삽입하는 방법 클래스 로딩 시점에 바이트 코드에 공통 기능을 삽입하는 방법 주요 ..
1. 젠킨스 설치 (GCP) wget은 웹 서버로부터 콘텐츠를 가져오는 프로그램 sudo yum -y install wget sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key sudo yum -y install jenkins 젠킨스 설치 확인 rpm -qa | grep jenkins ( 결과 : jenkins-2.189-1.1.moarch ) *버전은 다를 수 있음 2. 설정 ( 포트번호 변경) 젠킨스 설정 파일은 /etc/sysconfig 폴더에 있는 jenkins 파일 ..
'a'와 'b'로만 이루어진 문자열에서 같은 문자가 세 번 연속하는 경우를 포함하지 않는 substring 중 가장 긴 것의 길이를 구하는 문제이다. 이전 문자를 기억하기 위한 char형 변수와 연속한 문자가 이전 문자와 동일한지 여부를 체크하는 boolean 값을 이용해서 문자열의 현재 인덱스에서 같은 문자가 세 번 연속 등장했는지 검사한다. 분기문을 설명하자면, 현재 확인하고 있는 위치의 문자가 이전 문자와 같은 경우는 두 가지 경우로 나눌 수 있다. 같은 문자가 두 번째 등장한 경우와 세 번 이상 등장한 경우이다. 두 번째 등장했다면 identical의 값을 true로 변경하고 세 번째 등장할 경우를 대비한다. 그러고 나서 등장하는 문자가 이전과 다르다면 identical의 값을 false로 되돌리..
오늘 본 테스트는 내게는 너무나 어려웠다. 시간이 충분하다면 재밌게 풀 수 있는 문제들이었던 것 같은데 시간 분배에 아주 실패했다. 우선 4개의 문제를 둘러보고 먼저 시작할 문제를 골라 시작했는데, 계속 조금만 더 디버깅해보면 될 것 같은 생각에 붙잡고 있다가 시간이 흐르고 다른 문제를 풀기 시작하기에는 시간이 부족할 것 같아서 이 문제라도 풀어내야겠다 하고 끝까지 붙잡고 있다가 시험이 끝난 뒤에도 한참 디버깅하고, 점심 먹고 다시 앉아 함수를 분리해서 코드를 다시 짜보았다. 입력으로 플레이어 수와 매 턴에 플레이어가 뽑아서 나온 카드가 순서대로 주어진다. 게임에는 A, J, Q, K 네 가지 카드가 사용되고, 각 카드마다 수행 내용이 다른데 마지막에 각 플레이어가 가지게 되는 사탕의 개수를 출력하는 것..
문제를 풀고 제출했는데 시간 초과! 완전 탐색을 하기 위해 재귀를 이용하긴 했지만 꼭 필요한 경우만 돌았는데도 시간 초과라 의아했다. 완전 탐색이 아닌 다른 방법으로 푸는 방법도 있겠지만 Math.max() 메서드 사용이 시간 지연의 원인일 수도 있겠다는 생각이 들었다. 대충 검색을 해보니 Math.max()의 성능이 그리 좋지 않다는 것을 확인할 수 있었다. 그래서 삼항 연산자, 비교 연산자, Math.max()를 이용한 최댓값 구하기의 속도를 비교해 보았다. public class Test { public static void main(String[] args) { long start = 0, end = 0; long[] time = new long[4]; int fastest = 0; int[] a..