본 포스팅은 우아한 테크 톡을 참고하였습니다. https://www.youtube.com/watch?v=A0TB7qG-JBE&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=7 유튜브 링크 단위 테스트란 무엇인가 단위 테스트(Unit Testing)는 소프트웨어 개발에서 중요한 품질 보증 및 테스트 방법 중 하나입니다. 이것은 소프트웨어의 가장 작은 단위, 즉 함수, 메서드 또는 클래스와 같은 개별 컴포넌트를 격리된 환경에서 테스트하는 것을 의미합니다. 각 단위 테스트는 코드의 특정 부분을 검증하고 예상대로 동작하는지 확인하는 것을 목표로 합니다. 대표적인 단위 테스트 프레임워크로는 JUnit(자바), NUnit(C#), pytest(Python) 등이 있습니다. Moc..
비트마스크 (BitMask) 란 컴퓨터는 내부적으로 모든 자료를 이진수로 표현한다. 이와 같은 특성을 이용해 정수의 이진수 표현을 자료구조로 쓰는 기법을 비트 마스크라고 한다. 비트(bit) 용어 그대로 비트와 관련된 내용이라고 생각하면 편하다. 비트는 0, 1값을 갖고 이를 false/true 또는 off/on 라는 상태를 나타내기도 한다. 이를 흔히 말하는 이진법을 사용하는 것을 의미한다. 비트마스크의 장점 1. 수행 시간이 빠르다. 비트마스크 연산은 bit 연산이기 때문에 O(1)에 구현되는 것이 많다. 따라서 다른 자료구조를 이용하는 것보다 훨씬 빠르게 동작하게 된다. 다만, 비트마스크를 이용하는 경우에는 비트의 개수만큼 원소를 다룰 수 있기 때문에 연산 횟수가 적은 경우에는 속도에 큰 차이가 없..
문제 https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net 어떻게 풀 것인가? 문제를 읽어보자. ", 두 사람의 친구 네트워크에 몇 명이 있는지 구하는" 이라는 어절을 읽었을 때, 집합에 대한 개념과 이를 이용한 유니온-파인드 알고리즘을 떠올려서 문제를 풀었다. 하지만 시간초과가 발생했다. 왜 일까? 단순 유니온 - 파인드 알고리즘만을 이용한다면, 공통된 친구를 찾는 부분에서 시간초과가 발생했다. 그래서 HashMap을 이용하여 시간복잡도..
문제 https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 어떻게 풀 것인가? 2개의 우선순위큐를 이용한다. 각각을 minHeap 그리고 maxHeap으로 선언하고 작은 값을 우선순위로 가지는 큐는 Compartor인터페이스를 사용하여 메소드를 오버라이딩한다. 두개의 우선순위 큐의 크기가 같은 경우는 maxHeap에 입력된 값을 추가하고, 입력한 값이 minHeap의 최솟값보다 크다면 둘을 swap한다. 두개의 크기가 다른 경우 mi..
Priority Queue PriorityQueue란 우선순위 큐로써 일반적인 큐의 구조 FIFO(First In First Out)를 가지면서, 데이터가 들어온 순서대로 데이터가 나가는 것이 아닌 우선순위를 먼저 결정하고 그 우선순위가 높은 데이터가 먼저 나가는 자료구조이다. PriorityQueue를 사용하기 위해선 우선순위 큐에 저장할 객체는 필수적으로 Comparable Interface를 구현해야한다. Comparable Interface를 구현하면 compareTo method를 override 하게 되고 해당 객체에서 처리할 우선순위 조건을 리턴해주면 PriorityQueue 가 알아서 우선순위가 높은 객체를 추출 해준다. PriorityQueue는 Heap을 이용하여 구현하는 것이 일반적이..
문제 https://www.acmicpc.net/problem/1922 1922번: 네트워크 연결 이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다. www.acmicpc.net 어떻게 풀 것인가? 최소 스패닝 트리(MST) 와 그로 인한 크루스칼 알고리즘을 이용하여 문제를 해결하였다. 아래 코드를 참고해보면 알겠지만 언뜻보면 유니온-파인드 알고리즘 처럼 보일 수 있겠으나 편의를 위해서 함수명을 그렇게 작성을 하였다. 사실 이 문제의 경우 "최소 스패닝 트리와 크루스칼 알고리즘을 알고있어?" 라는 것을 물어보는 것 같았다. 특수한 스킬이나 응용이 필요한 것은 없었다. 물론 최소 스패닝 트리와 크루스칼 알고리즘은 어렵다... 풀면서 놓쳤던점 X 이 문제를 통..
ViewBinding(뷰 바인딩) 이란 레이아웃 XML 파일에 선언한 뷰 객체를 코드에서 쉽게 이용하는 방법이다. 레이아웃 XML 파일에 등록한 뷰는 findViewById() 함수로 얻어서 사용해야한다. 그런데 이러한 과정은 너무나도 귀찮다. 그래서 이러한 해결책이 바로 ViewBinding이다. 사용하는 방법 buildFeatures { viewBinding = true } 우선 build.gradle 파일을 열고 android 영역에서 위와 같은 코드를 선언한다. 이렇게 하면 레이아웃 XML파일에 등록된 뷰 객체를 포함하는 클래스가 자동으로 만들어진다. 자동으로 만들어지는 클래스의 이름은 레이아웃 XML 파일 명을 따른다. 첫글자를 대문자로 하고 밑줄(_)은 빼고 뒤에 오는 단어를 대문자로 만든후 ..
EditTextView사용자가 글을 입력할 수 있는 뷰이다. 자주 사용하는 속성android:lines, android:maxLines EditText는 한줄 입력 크기로 출력되었다가 사용자가 키보드에서 엔터를 누르면 아래로 늘어나서 여러 줄 입력 크기가 된다. 근데 처음부터 여러 줄 입력 크기로 나오게하는 속성이 android:lines이다. android:lines="3"은 처음부터 3줄 입력크기로 나온다는 뜻이다. android:maxLines 속성은 maxLines="3"으로 지정하면 처음에는 한줄 입력크기로 출력되다가 그리고 사용자가 키보드에서 엔터를 누르면 3줄까지 늘어나고 더 이상 늘어나지 않는다는 의미이다. android:inputTypeinputType은 글을 입력할 때 올라오는 키보드를..