본 포스트는 헤드퍼스트 디자인패턴을 읽고 정리한 글입니다. Ch2 옵저버 패턴 Question: 기상 스테이션 구축 현재 기상 조건(온도, 습도, 기압)을 추적하는 WeatherData 객체를 바탕으로 3개의 항목을 화면에 표시하는 애플리케이션을 만들어야 한다. 요구사항 3가지 디스플레이에 표시할 항목은 각각 현재 조건, 기상 통계, 기상 예보이다. 화면에 표시되는 항목은 WeatherData 객체에서 최신 측정치를 수집할 때마다 실시간으로 갱신된다. 날씨 디스플레이는 확장 가능해야 한다. WeatherData 객체 코드 채우기 public class WeatherData { // 인스턴스 변수 선언 CurrentConditionsDisplay currentConditionsDisplay = new Cu..
CS 요모조모
본 포스트는 헤드퍼스트 디자인패턴을 읽고 정리한 글입니다. Ch1 디자인 패턴 소개와 전략 패턴 전략 패턴 (Strategy Pattern) 알고리즘군을 정의하고 캡슐화하여, 실행 중에 알고리즘을 교체할 수 있게 하는 디자인 패턴이다. 변경 가능성이 있는 부분을 분리하여 인터페이스를 이용하여 캡슐화하고, 실행 중에 구현체를 선택하여 사용할 수 있도록 한다. Question 다양한 오리(Duck)을 만들고 싶다. 모든 오리는 각자 다른 모양(display)을 가지지만, 모두 꽥꽥 소리(quack)를 낼 수 있으며, 날(fly) 수 있다. 어떻게 구현할 수 있을까? 간단하게 생각해 보자면 Duck이라는 슈퍼 클래스를 두고, 이를 다양한 종류의 오리가 상속받도록 구현할 수 있을 것이다. Problem 하지만,..
본 글은 건국대학교 알고리즘 동아리 AlKon 스터디 5조에서 진행된 발표 내용입니다. 2517 달리기 2517번: 달리기 첫째 줄에는 선수의 수를 의미하는 정수 N이 주어진다. N은 3 이상 500,000 이하이다. 이후 N개의 줄에는 정수가 한 줄에 하나씩 주어진다. 이 값들은 각 선수들의 평소 실력을 앞에서 달리고 있는 www.acmicpc.net 시간 제한 입력 범위 1초 N, 기량 3 ≤ N ≤ 500,000 // 1 ≤ 기량 ≤ 1,000,000,000 N: 선수의 수 N개의 줄: 각 선수들의 평소 실력을 앞에서 달리고 있는 선수부터 제시 참가한 선수들의 평소 실력은 모두 다르다. 접근법 세미나에서 들은 내용은 아래와 같다. 기량의 최댓값은 1,000,000,000이므로 이 범위로는 세그먼트 ..
본 글은 건국대학교 알고리즘 동아리 AlKon 스터디 5조에서 진행된 발표 내용입니다. 2458 키 순서 2458번: 키 순서 1번부터 N번까지 번호가 붙여져 있는 학생들에 대하여 두 학생끼리 키를 비교한 결과의 일부가 주어져 있다. 단, N명의 학생들의 키는 모두 다르다고 가정한다. 예를 들어, 6명의 학생들에 대하여 www.acmicpc.net 시간 제한 입력 범위 1초 N, M, a, b 2 ≤ N ≤ 500 // 0 ≤ M ≤ N(N-1)/2 N: 학생의 수 M: 키를 비교한 회수 a, b: a번 학생이 b번 학생보다 키가 작다. 문제: 자신이 키가 몇 번째인지 알 수 있는 학생이 모두 몇 명인지를 출력하라. 접근법 아직 문제만 보고 알고리즘을 떠올리는 게 쉽지가 않아서 플로이드-워셜을 어떻게 써..
Counting Sort (계수 정렬) 시간 복잡도 Counting Sort 알고리즘은 추가적인 배열을 이용하여, 두 수를 비교하는 과정 없이 정렬하는 알고리즘으로, 시간복잡도는 O(n)이다. 장/단점 일반적으로 빠르다는 정렬 알고리즘의 평균 시간복잡도는 O(nlogn)이다. 이에 비하면 Counting Sort는 굉장히 빠른 시간이지만, 메모리 낭비와 정수로 표현되는 자료에 제한된다는 등의 단점으로, 보통은 O(nlogn)의 정렬 알고리즘을 이용한다. Counting Sort는 정렬할 데이터의 크기가 비교적 작을 때 효율적이다. 알고리즘 1. array를 순회하며, 각 값이 나올 때마다 해당 값을 index로 하는 count 배열의 값을 1 증가시킨다. ex. if arr[3] == 1 -> count..
.gitignore 더보기 .gradle build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ # MacOS .DS_Store ### IntelliJ IDEA ### .idea/ *.iws *.iml *.ipr out/ !**/src/main/**/out/ !**/src/test/**/out/ ### VS Code ### .vscode/ Git 최초 설정 git config --global user.name [사용자이름] git config --global user.email [사용자-이메일주소] Git GitHub 연동 GitHub repository 생성 로컬 git init : 디렉토리에 .git..
vector std::vector - cppreference.com template class vector; (1) (2) (since C++17) 1) std::vector is a sequence container that encapsulates dynamic size arrays. The elements are stored contiguously, which means that elements can be acces en.cppreference.com cppreference 왈: 동적 크기 배열을 캡슐화하는 시퀀스 컨테이너 크기가 동적으로 변하는 배열이라고 생각하면 편하다. 배열을 선언할 때는 크기를 지정하지만, 벡터는..
1920번: 수 찾기첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들www.acmicpc.net문제N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. 입력첫째 줄에 자연수 N이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 출력M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으..