분류 전체보기
[C++] 백준 21608번 상어 초등학교
21608번: 상어 초등학교 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호 www.acmicpc.net 삼성 SW 역량 테스트 기출 문제 에 수록된 문제. 실버1 문제이고 나온지 얼마 안 돼보이는 문제였다. 문제가 과하게 친절하게 해야할 것들을 다 알려준다. 문제에 나온대로만 구현해주면 풀 수 있다. (물론 나는 학생 수를 잘못 고려해서 틀렸다. 아마 대부분 사람들이 이것때문에 런타임 에러나서 틀린 것 같았다. 학생 수가 N * N명인데, N으로만 생각해서 틀렸다. 좀 더 생각했으면 좋았을 것 같은데, 게시판에 누가 이렇게 올려놓은 걸 보고 바로 알 수 ..
[Kotlin] 안드로이드 뷰 바인딩, 뷰 결합, View Binding
뷰 결합 | Android 개발자 | Android Developers 뷰 결합 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다. 바인딩 developer.android.com 뷰 바인딩에 대한 공식문서 뷰 바인딩은 쉽게말해서 코드 파일에서 XML에 정의된 뷰들을 바로 참조할 수 있는 기능이다. 뷰 바인딩은 findViewById를 대체할 수 있다. 따라서 모든 뷰에 대해 findViewById를 일일이 호출할 필요가 없다. 또한 findViewById에서는 잘못된 id를 매개변수로 전달할 경우, null 위험성이 존재한다. 구글에서 Kotlin Extension을 Deprecat..
[C++] 백준 20055번 컨베이어 벨트 위의 로봇
20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 삼성 SW 역량 테스트 기출 문제 에 수록되어 있는 문제중 하나. 실버1 문제이고, 정답률이 높길래 풀어봤는데, 문제가 상당히 표현이 애매모호하게 되어있다. 게시판을 참조해서 사람들이 해석해준 방법을 보고난 후에 풀 수 있었다. 문제풀이 문제의 조건을 정리하면 다음과 같다. 컨베이어 벨트는 2층구조이고, 1층은 1 ~ N, 2층은 N + 1 ~ 2N의 범위이다. (2층은 2N ~ N + 1이라고 생각해야한다.) 각 컨베이어 벨트 칸 하나마다 ..
[C++] 백준 17779번 게리맨더링 2
17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net 삼성 SW 역량 테스트 기출 문제 에 수록된 문제. 구현 / 브루트포스(완전탐색) / 시뮬레이션 문제. 처음에 조건 한줄을 잘못설정해줘서 계속 틀렸다. 반복문에서 break를 걸어주어야 하는데, continue를 써준게 틀린원인이였다. 정답률도 높은 편이고 생각한대로 구현을 잘 해주면 쉽게 맞출 수 있는 문제였다. 문제풀이 문제의 조건을 요약하면 다음과 같다. 선거구를 5개로 나눈다. 선거구를 나누는 것은 기준점 x, y와 길이 d1, d2를 정해서 나눠준다. d1은 ..
[C++] 백준 17140번 이차원 배열과 연산
구현 / 정렬 / 시뮬레이션 문제. 삼성 S/W 기출문제 중 한 문제이다. 문제에 나온 그대로 구현하면 시간복잡도 고려할 필요없이 맞출 수 있다. 조건들이 생각보다 복잡하지만 골드4 구현 문제치고는 쉬운 편에 속한다고 생각한다. 정답 비율도 높은 걸 보면 쉽게 풀 수 있는 것 같다. 문제풀이 구현 문제는 문제에 나온 내용을 잘 정리하는 것이 중요하다. 문제의 내용을 간략하게 정리하면 다음과 같다. 배열 A의 최초 크기는 3x3이다. 그리고 1초마다 다음과 같은 연산을 한다. 행의 길이 >= 열의 길이 일 경우, 배열 A의 모든 행을 정렬 행의 길이 < 열의 길이 일 경우, 배열 A의 모든 열을 정렬 배열 A를 정렬하기 위해서는 각 수가 몇번 나왔는지 알아야 하고, 정렬의 우선순위는 다음과 같다. 등장횟수..
[C++] 백준 14890번 경사로
14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 삼성 SW 기출문제. 구현 문제이며, 골드3 문제치고는 높은 정답률을 기록하고 있다. 문제에서 세부조건들까지 상세하게 줘서, 문제에 있는 그대로 구현만 하면 맞출 수 있는 문제다. 문제풀이 문제의 조건들을 간략하게 요약해보면 다음과 같다. N x N 지도에서, 나갈 수 있는 길을 찾는다. 나갈 수 있는 길이란 해당 길에서 높이가 모두 같은 곳을 의미한다. 나갈 수 있는 길은, 1행 또는 1열의 모습으로 나타난다. 따라서 최대 2N개가 가능하다. 길에는 경사로를 설치할 수 있다. 경사로에..
[C++] 백준 17144번 미세먼지 안녕!
17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 구현 / 시뮬레이션 문제. 처음에 상, 하, 좌, 우를 움직이길래 BFS문제인 줄 알았는데 아니였다. (BFS와 비슷하게 구현하긴 했다.) 삼성 SW기출문제에 나와있는 문제다. 골드4 문제치고 반례같은 것도 없었다. 정답률도 높은 편이였다. 문제풀이 문제를 다음과 같은 순서대로 구현만 해주면 된다. 1. 미세먼지 확산. 이 때 상, 하, 좌, 우 방향으로 확산되는데 확산되는 미세먼지의 양은 A/5이다. 그런데 확산되는 방향 중 공기청정기가 있거나, 공간이 없는 ..
[C++] 백준 17135번 캐슬 디펜스
구현 / 시뮬레이션 문제. 삼성 A형 기출 문제에 수록되어 있는 문제다. 조합, 구현으로 문제를 풀었는데 그래프 탐색 이론으로도 풀 수 있다고 한다. (그래프 탐색 이론은 상상도 못했고 지금도 잘 감이 안온다. 아마 궁수마다 BFS돌면서 제일 가까운 적을 죽이는 방식인 것 같다.) 골드 구현 문제를 많이 풀어봤다면 시도해볼법한 문제였다. 처음에 테스트 케이스를 다 맞춰서 문제를 푼 줄 알았는데, 자꾸 31%를 못넘었었다. 나는 적들의 좌표를 기록해주고, 거리와 c값에 따라 정렬해 준 후에 푸는 방식으로 풀었는데, 죽은 적들의 좌표를 기록에서 지워주지 않아서 틀리고 있었다. 문제풀이 각 문제의 조건들을 어떻게 해결할 수 있을까? 1. 두 위치의 거리는 |r1 - r2| + |c1 - c2|로 해결할 수 있..
[C++] 백준 15684번 사다리 조작
15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 백트래킹 문제. 삼성 SW 기출문제에 있어서 풀어봤는데, 구현 문제가 아니라 시뮬레이션 문제였다. (사실 거의 구현에 가깝다.) 시간 초과를 줄일 수 있는 방법이 떠오르지 않아서 게시판을 계속 봤는데 원하는 게시물이 없어서 많이 헤맸다. 그러다 한 게시물을 찾아서 탐색시, 중복을 제거하라는 것을 보고 맞출 수 있었다. 백트래킹은 중복을 줄여야 맞출 수 있다는 것을 다시 한 번 배운 문제다. 사실 아직도 왜 맞은지는 잘 모르겠다. 시간 복잡도를 계산했을때, 탐색하..
[C++] 백준 11660번 구간 합 구하기 5
다이나믹 프로그래밍 문제의 한 분야인 누적 합 문제. 처음에는 어떤 문제인지 몰라서 헤맸는데, 검색해서 이렇게 푸는 문제구나 라고 알게된 후 풀었다. 누적 합이라는 알고리즘을 사용해서 푸는 대표적인 문제였다. 문제풀이 문제에서 입력하는 (x1, y1)과 (x2, y2)를 입력받으면, 구간의 사이즈가 정해진다. 문제의 예시인 (2, 2)부터 (3, 4)까지라면 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 위에 파란색 배경에 흰색 글자로 된 숫자들이 구간으로 된다. 즉, x1이 행의 시작, y1이 열의 시작이 되고 x2가 행의 끝 y2가 행의 끝이 된다. 따라서 우리는 입력을 받을 때, 누적 합의 정보를 배열로 저장해놔야 한다. 어떻게 저장할 수 있을까? 누적 합 저장하기 나 같은 경우에는 위처..