전체 글
[C++] 백준 1260번 DFS와 BFS
오랜만에 풀어보는 DFS와 BFS 문제였다. 그래프 이론을 알고 있다면 어려운 문제는 아니다. DFS란? 깊이 우선 탐색(Depth First Search)라는 그래프 탐색 방법 중 하나로, 방문해 나갈 수 있는 정점이 있다면 계속해서 탐색하는 것. 시작점이 루트가 되어서 깊이를 1씩 더해가는 방식이다. 보통은 재귀함수를 이용해서 구현한다. BFS의 시간복잡도는 n개의 정점과 m개의 간선이 있을 때, O(n + m)이다. 백트래킹(backtracking) 알고리즘이 DFS에서 파생됐다. BFS란? 너비 우선 탐색(Breadth First Search)라는 그래프 탐색 방법 중 하나로, 이번에 방문한 정점에서 방문해 나갈 수 있는 모든 정점을 모두 탐색하는 것을 의미한다. 보통은 자료구조 queue를 이용..
[C++] 벡터 사용 시, () 선언과 [] 선언의 차이
vector 선언 시 []괄호와 ()괄호의 차이가 있다. []괄호로 선언시, 텅 빈 이차원 배열이라고 생각하면 된다. 각 벡터의 인덱스마다 동적으로 크기를 할당할 수 있다. ()괄호로 선언시, 처음에 그 공간들을 만든 후에 동적으로 크기를 늘릴 수 있다. 예시로 확인해 보자면 []괄호로 벡터 선언시, []괄호로 선언 시에는 배열의 높이에는 제한을 두고, 각 층마다는 동적으로 크기를 할당하겠다는 뜻이다. 위 코드는 벡터의 인덱스를 넘었으므로 에러가 나게 된다. 출력을 안해서 에러가 안나 보일 수 있겠지만 비정상적으로 종료된 것을 커맨드에서 확인할 수 있다. ()괄호로 벡터 선언시, 이 코드에서는 처음에 선언한 1001의 크기를 벗어났다. 하지만 처음 선언한 1001의 크기는 사실 큰 의미는 없다. 1001..
[Android] Do It! 안드로이드 도전 04. SMS 입력 화면 만들고 글자의 수 표시하기 + 데이터 바인딩, 뷰 모델, 라이브 데이터로 풀어보기
Do It! 안드로이드 p.151 도전 04. 문제 editText의 addTextChangedListener를 사용하면 되는 도전 문제 였다.물론 이렇게 할 수도 있지만, 데이터 바인딩과 라이브 데이터를 이용해서도 한번 풀어보았다. 우선 editText의 addTextChangedListener를 사용해서 풀면 다음과 같다. 우선 레이아웃 구조를 살펴보자면 다음과 같다. 제약 레이아웃을 사용한 구조이다. background로 사용한 drawable이 있는데 그냥 검은색 네모칸을 위해 만들어 놓았다. TextView도 하나 만들어 놓아서 바이트 수를 표기할 것이다. 버튼은 두 개를 만들어 놓았고 수평구조를 이루게 레이아웃 선을 선정해 놓았다. EditText의 addTextChangedListener를 ..
[Android] Do It! 안드로이드 도전 03. 두 개의 이미지뷰에 이미지 번갈아 보여주기
Do It! 안드로이드 p.150 도전 03. 문제 app:layout_constraintHorizontal_chainStyle="packed" 라는 속성이 있다. 이 속성값은 제약 레이아웃에서 뷰 두개를 가운데로 모아주는 역할을 해 주는 속성이다. init() 메서드로 전역 변수로 선언한 수평스크롤 뷰 2개를 초기화 해준다. 그리고 upBtn과 downBtn 메서드를 구현해서 버튼 온클릭 리스너로 xml파일에서 정해줬다.
[Android] 스크롤 뷰, Scroll View
스크롤 뷰는 한 화면에 뷰가 모두 보이지 않을 때 사용한다. 단순하게 스크롤 뷰만 추가하면 스크롤이 생긴다. 스크롤 뷰의 방향은 디폴트는 수직 방향이다. 수평 방향의 스크롤 뷰는 HorizontalScrollView를 사용하면 된다. 이렇게 HorizontalScrollView 안에 ScrollView를 넣으면 가로 세로 모두 화면의 크기를 벗어날 경우 스크롤이 생기게 된다. 자바 소스 파일에서 setContentView 메서드로 레이아웃 파일을 지정해 준다. 그리고 init()이라는 초기화 메서드에서 img와 srcView를 초기화 해주고 srcView에 수평방향의 스크롤을 할 수 있도록 setHorizontalScrollBarEnabled(true)를 호출한다. 그리고 BitmapDrawable 자료..
[OS] OS의 시스템 구조
OS가 제공하는 서비스 OS가 유저에게 제공하는 서비스 유저 인터페이스를 제공한다. 프로그램 수행을 제어한다. 하드웨어 자원을 관리한다. (CPU, 메모리, 저장공간, I/O 장치) 파일 시스템을 관리한다. (생성, 삭제, 탐색) 프로세스들 간의 communication이 일어나도록 해준다. (shared memory, message passing) 에러를 탐지한다. OS는 효율성을 위해서 프로세스들에게 적절하게 자원을 할당한다. 하드웨어 사용 통계 자료를 제공한다. (Accounting) 하드웨어 보호 기능이 있다. (커널 모드와 유저 모드) 보안 기능이 있다. (로그인 시, password 입력) 시스템 콜 커널 모드(Privileged Instruction)로 진입하는 방법은 두 가지가 있다. 하드..
[Android] 프레임 레이아웃, Frame Layout
프레임 레이아웃은 중첩(Overlay) 기능이 있어서 뷰가 추가된 순서대로 차곡차곡 쌓이는 레이아웃이다. 만일 특정 뷰만 보여지게 하고 싶다면 visibility라는 속성을 이용하면 된다. visible : 뷰가 보여진다. 디폴트 값이다. invisible : 뷰를 보진 못하지만 뷰가 그 공간을 차지한다. gone : 뷰를 보지도 못하고 뷰가 그 공간을 차지하지도 않는다. 다음과 같이 이미지뷰를 두 개 생성해 놓고 먼저 생성한 이미지 뷰는 invisible 속성을 준다. 그러면 나중에 생성한 이미지 뷰만 보이게 된다. 이제 이미지를 클릭했을 때 다른 이미지가 보이도록 해 보겠다. xml파일이 아닌 소스 코드에서 소스를 수정하면 된다. 소스 코드가 어려운 구조는 아니다. xml에서 onClick 메서드를 ..
[Android] 테이블 레이아웃, Table Layout
테이블 레이아웃은 표, 엑셀 형태의 격자 모양의 화면을 구성하는 레이아웃이다. 테이블 레이아웃은 TableRow라는 태그가 여러 개 들어가는데 한 행을 의미한다. 이 행에는 여러 개의 뷰가 들어갈 수 있고, 하나의 뷰가 각각의 열이 된다. 테이블 레이아웃은 최상위 레이아웃으로 쓰는 것이 아니라, 부모 컨테이너 안에서 사용하는 레이아웃이다. 이 때, TableRow의 layout_height가 match_parent로 되어있는데, 내부적으로 항상 wrap_content로 설정되어있다. 그리고 layout_width는 내부적으로 항상 match_parent로 설정되어있다. 각 테이블 레이아웃에 버튼들을 추가하면 다음처럼 화면이 구성된다. 뷰들의 layout_width와 layout_height가 match_..
[C++] 백준 1002번 터렛
수학 문제. 예전에 처음 이문제를 봤을 때 원의 접점을 구하는 문제라고 생각 못했던 것 같다. 항상 그렇듯 알고리즘 문제에는 문제에 정말 많은 힌트가 들어있다 여기서도 변수에 r이라는 힌트가 주어져 있다. 그 말은 r은 원의 반지름. 원을 이용해서 풀라는 말이다. 문제 접근 방식 우선 두 원이 있을때 어떤 경우들이 있는지 확인해 보았다. 그렇게 보니 총 여섯 가지가 나오게 되었다. 따라서 두 원의 중점 사이의 거리, 반지름끼리의 합과 차만 알면 이 조건들을 구현할 수 있다. 우선 math.h 라이브러리를 사용해서 두 원의 중점 사이의 거리를 구할때 제곱과 루트 메서드를 사용했다. pow(수, 지수) : 수를 지수승 한다. sqrt(수) : 수에 루트를 씌운다. 메인함수의 시작부분에는 테스트 케이스 수를 ..
[C++] 백준 10989번 수 정렬하기 3
문제에서 입력받는 수의 개수가 1000만개이다. 메모리 제한이 8MB이고, int 자료형이 4byte이므로 모든 수를 저장했을 때 40MB가 돼서 메모리 초과가 난다. 문제 끝에 수가 10,000보다 작거나 같은 자연수라는 조건을 잘 확인했으면 카운팅 소트를 시도해 봤을 것 같다. 뭔가 고민을 많이 안하고 그냥 sort, priority_queue를 사용해서 풀려고 시도하다가 많이 틀렸다. 구현 자체는 크게 어려운 게 없다. 카운팅 소트는 입력을 받으면서 sort하는 알고리즘이다. GitHub - kimyunseok/study-record: my study-record my study-record. Contribute to kimyunseok/study-record development by creati..