문제출저 https://www.acmicpc.net/problem/2608 2608번: 로마 숫자 첫째 줄과 둘째 줄에 하나씩 로마 숫자로 표현된 수가 주어진다. 입력된 각 수는 2000 보다 작거나 같고, 두 수의 합은 4000보다 작다. www.acmicpc.net 문제분석 로마 숫자로 2개가 입력값으로 주어진다. 이 숫자를 더한 결과를 로마 숫자와 아라비아 숫자로 표시해야 한다. 로마 숫자에 대응되는 아라비아 숫자를 기록하기 위해 map 자료형을 사용했다. 정답을 구하기 위해 필요한 함수는 두 가지 이다. 로마 숫자를 아라비아 숫자로 바꾸는 함수 아라비아 숫자를 로마 숫자로 바꾸는 함수 로마 숫자 -> 아라비아 숫자 함수 로마 숫자를 하나씩 읽으면서 대응되는 숫자를 더한다. 이 때 현재 읽는 것과 ..
문제출저 https://www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 문제분석 컨베이어 벨트의 길이는 2N 컨베이어 벨트의 회전 -> 내구도와 로봇 위치 모두 회전한다. 컨베이어 벨트의 내구도 감소 -> 로봇을 올릴 때, 로봇이 움직일 때 로봇은 N에 도달하면 내린다. 위의 조건을 생각하면 코드를 구현한다. 컨베이어 벨트의 회전 -> 리스트로 구현, 뒤의 것을 빼서 앞에 것을 넣으면 회전하는 것 처럼 구현이 된다. 컨베이어 내구도 감소..
목차 Jenkins Jenkins란 오픈소스 CI/CD 도구 입니다. Jenkins는 빌드, 테스트, 배포 등의 프로세스를 자동화하고 스케줄링하여 소프트웨어 품질과 개발 생산성을 향상시킵니다. 또한, Jenkins는 다양한 플러그인을 통해 기능을 확장하므로 다양한 도구와 통합할 수 있습니다. Jenkins를 사용하면 개발자들은 크게 두 가지 이점을 얻을 수 있습니다. 첫째, Jenkins를 사용하면 개발자들은 반복적인 업무를 자동화하여 버그를 빠르게 찾아내거나 변경사항을 빠르게 적용할 수 있어 고객에게 빠르게 서비스를 제공(배포) 할 수 있습니다. 즉, 고객의 요구사항에 빠르게 대응할 수 있개 해줍니다. 둘째, 고객에게 서비스를 제공하기 위한 빌드, 테스트, 배포 과정이 자동화됨으로 개발자가 수동으로 해..
목차 입력 // main 함수에 throws IOException 추가 public static void main(String[] args) throws IOException // BufferedReader 로 문자 입력 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 여러 개 입력 받을 경우 StringTokenizer st = new StringTokenizer(br.readLine()); int w = Integer.parseInt(st.nextToken()); int h = Integer.parseInt(st.nextToken()); // 한 개 입력 받을 경우 String s = br.readLine(); ..
목차 Docker 란 무엇인가요? 더보기 Docker란 애플리케이션을 빠르게 구축, 테스트 및 배포 할 수 있는 컨테이너 기반 오픈소스 가상화 플랫폼 입니다. Docker는 애플리케이션을 컨테이너로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드 등 애플리케이션을 실행하는데 필요한 모든 것이 담겨져 있습니다. Docker를 사용하면 환경에 상관없이 애플리케이션을 신속하게 배포, 확장 할 수 있습니다. 가상화란 무엇인가요? 더보기 가상화란 하드웨어, 운영체제, 소프트웨어, 네트워크 등 다양한 컴퓨팅 리소스를 추상화하고 분할하여 여러 개의 독립된 환경으로 만드는 기술 입니다. 즉 하나의 물리적 서버를 여러 개의 가상 서버로 분할하여 사용하는 기술입니다. 이를 통해 하나의 물리적 서버를 최대한 활..
목차 이번 글에서는 Docker 에 대해서 공부한 내용을 정리해보려 합니다. Docker 가 무엇인지, 어떤 식으로 프로세스가 진행되는지 알아보겠습니다. Docker Docker 란 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 컨테이너 기반인 오픈소스 가상화 플랫폼 입니다. Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. Docker를 사용하면 환경에 구애 받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제 없이 실행될 것임을 확신할 수 있습니다. Docker 기술은 왜 등장하게 되었을까요? Docker 등장 배경 Docker ..
개요 오늘은 tistory category 접기 / 펼치기 기능 구현을 정리해보려 합니다. 최근 블로그 정리를 하면서 카테고리의 재구성 했습니다. 재구성을 하고 보니 Category가 전부 펼쳐저 있으니 너무 많아서 지저분하고 정신 산만한 느낌을 받았습니다. 그래서 Category의 기본 설정을 접음 상태로 하는 방법을 알아봤고 적용했습니다. 이 글은 어떻게 했는지를 정리한 글 되겠습니다. 구현 관리자 페이지 > 꾸미기 > 스킨 편집 > html 편집 순서로 이동합니다. html 탭의 ~ 사이에 다음 소스 코드를 추가합니다. 코드의 동작 내용은 아래와 같다 하네요. 폴더(=상위 카테고리)에 custom-category-sub이라는 클래스를 addClass() 메서드를 사용하여 추가하고 href 애트리뷰트..
목차 Comparable Comparable 인터페이스는 compareTo(T o) 메소드가 하나 선언되어 있다. 이 말은 Comparable 인터페이스를 사용하려면 compareTo(T o)을 재정의해야 한다는 것이다. 자기 자신과 매개변수 객체를 비교 한다. class dotone implements Comparable { int one; int two; dotone(int one, int two) { this.one = one; this.two = two; } // 정수 비교 public int compareTo(dotone o) { return this.two - o.two; } } class dottwo implements Comparable { String one; String two; dot..
목차 이번 포스팅에서는 영속성 컨텍스트라는 별도의 영역을 통해 얻을 수 있는 이점과 영속성 컨텍스트에 무엇인지에 대해 알아보겠습니다. 영속성 컨텍스트란? 영속성 컨텍스트란 엔티티를 영구히 저장하는 환경을 뜻 합니다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 합니다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리합니다. 엔티티 매니저와 영속성 컨텍스트 엔티티 매니저를 생성할 때 하나가 생성됩니다. 엔티티 매너지를 통해 영속성 컨텍스트에 접근하고 관리할 수 있습니다. 잠시 엔티티와 엔티티 매니저에 대해 알아보고 가겠습니다. 엔티티(Entity) 엔티티는 영속성을 가진 객체로 DB 테이블에 보관할 대상입니다..
목차 트리거(Trigger) 트리거란 영어로 방아쇠라는 뜻입니다. 방아쇠를 당기면 총기 내부에서 알아서 일련의 작업을 실행하고 총알이 날아갑니다. 이와 같이 데이터베이스에서도 트리거는 특정 테이블에 INSERT, DELETE, UPDATE 와 같은 DML이 실행했을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램 입니다. 즉 사용자가 직접 호출하는 것이 아니라 데이터베이스에서 자동적으로 호출하는 것이 큰 특징입니다. 트리거는 데이터베이스 시스템에서 데이터의 삽입, 갱신, 삭제 등의 변경 이벤트가 발생했을 때 관련 작업이 자동으로 수행되게 하는 절차형 SQL(프로그램) 입니다. 이벤트는 전체 트랜잭션 대상과 각 행에 의해 발생되는 경우 모두를 포함할 수 있으며 테이블과 뷰, DB 작업을 대상으로 ..
목차 데이터베이스 정규화(Normalization) 개념 정규화는 데이터의 중복성을 최소화하고 일관성 등의 유지를 통해 데이터베이스의 품질을 보장하고 성능 향상을 목적으로 수행합니다. 정규화를 통해 불필요한 데이터(redundancy)를 제거하고 이상현상이 있는 릴레이션을 무손실 분해하여 이상현상을 제거합니다. 이 과정에서 이상현상이 있는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 됩니다. 이를 단계별로 구분하여 수행하는 것을 정규형이라고 하고 정규형이 높아질수로 이상현상은 줄어들게 됩니다. 데이터베이스의 정규화 데이터의 중복을 최소화하고 불필요한 데이터를 제거하는 작업을 통해 이상현상을 제거해 데이터베이스의 품질을 보장하고 성능을 향상하는 작업 그러면 이상현상이 무엇일까요? 이상현상(Anomal..
목차 개념 크루스칼 알고리즘은 그래프 내의 모든 정점들을 가장 적은 비용으로 연결하기 위해 사용됩니다. 그래프에는 정점과 간선이 있는데, 간선에 가중치가 포함되어 있습니다. 그래프 내의 모든 정점을 포함하고 사이클이 없는 연결선을 그렸을 때, 가중치의 합이 최소가 되는 상황을 구하고 싶을 때 크루스칼 알고리즘을 사용합니다. 즉, 최소 신장 트리를 구하기 위한 알고리즘 입니다. 신장 트리와 최소 신장 트리 신장 트리(Spannging tree) 다음과 같이 정의합니다. 그래프에서 1) 모든 정점을 포함하고 2) 정점 간 서로 연결되어 있으며 싸이클이 존재하지 않는 그래프 (싸이클이 존재하는 않는 것은 tree 기본 조건) 예를 들어 아래와 같은 그래프가 있다고 가정해 보겠습니다. 여기서 나올 수 있는 신장..