📕문제 흑백 영상을 압축하여 표현하는 데이터 구조로 쿼드 트리(Quad Tree)라는 방법이 있다. 흰 점을 나타내는 0과 검은 점을 나타내는 1로만 이루어진 영상(2차원 배열)에서 같은 숫자의 점들이 한 곳에 많이 몰려있으면, 쿼드 트리에서는 이를 압축하여 간단히 표현할 수 있다. 주어진 영상이 모두 0으로만 되어 있으면 압축 결과는 "0"이 되고, 모두 1로만 되어 있으면 압축 결과는 "1"이 된다. 만약 0과 1이 섞여 있으면 전체를 한 번에 나타내지를 못하고, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래, 이렇게 4개의 영상으로 나누어 압축하게 되며, 이 4개의 영역을 압축한 결과를 차례대로 괄호 안에 묶어서 표현한다 위 그림에서 왼쪽의 영상은 오른쪽의 배열과 같이 숫자로 주어지며, 이 영상을..
전체 글
안녕하세요 💻📕문제 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수로 되어 있다면 이 종이를 그대로 사용한다. (1)이 아닌 경우에는 종이를 같은 크기의 종이 9개로 자르고, 각각의 잘린 종이에 대해서 (1)의 과정을 반복한다. 이와 같이 종이를 잘랐을 때, -1로만 채워진 종이의 개수, 0으로만 채워진 종이의 개수, 1로만 채워진 종이의 개수를 구해내는 프로그램을 작성하시오. 📕입력 첫째 줄에 N(1 ≤ N ≤ 37, N은 3k 꼴)이 주어진다. 다음 N개의 줄에는 N개의 정수로 행렬이 주어진다. 📕출력 첫째 줄에 -1로만 채워진 종이의 개수를, 둘째 줄에 0으..
아직 코틀린 문법과 Android Studio 사용법이 미흡하지만 일단 하나 만들어 보는 게 좋을 거 같아서 시작했지만 많이 허술하고 아직 모자랍니다 ㅎㅎ.. 😂😂 앱을 만들고 보니 코드 짜는 것도 어렵지만 이쁘게 꾸미는 것도 엄청 일이라고 느꼈다. 이번 계산기 앱에서 버튼 디자인 및 색상을 입히는 것은 아래 블로그의 코드를 참조했다. https://whyprogrammer.tistory.com/574 [안드로이드] 계산기 어플 앱 만들기 with 코틀린 1. 안드로이드 계산기 어플 앱 만들기 with 코틀린 이번에 진행한 프로젝트는 안드로이드 계산기 어플리케이션 만들기입니다. 간단하게 사용자가 입력한 식을 연산할 수 있고 계산 기록을 확인할 whyprogrammer.tistory.com 🔎계산기의 기능..
📕문제 N×N크기의 땅이 있고, 땅은 1 ×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A [r][c] 명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모든 나라는 1 ×1 크기이기 때문에, 모든 국경선은 정사각형 형태이다. 오늘부터 인구 이동이 시작되는 날이다. 인구 이동은 하루 동안 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속된다. 국경선을 공유하는 두 나라의 인구 차이가 L명 이상, R명 이하라면, 두 나라가 공유하는 국경선을 오늘 하루 동안 연다. 위의 조건에 의해 열어야하는 국경선이 모두 열렸다면, 인구 이동을 시작한다. 국경선이 열려있어 인접한 칸만을 이용해 이동할 수 있으면, 그 나라를 오늘 하..
📕문제 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있는 수의 순서를 뒤집는 함수이고, D는 첫 번째 수를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다. 함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. 예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 수를 버리는 함수이다. 배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오. 📕입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다. 각 테스트 ..
📕문제 대한민국을 비롯한 대부분의 나라에서는 터널 내에서의 차선 변경을 법률로 금하고 있다. 조금만 관찰력이 있는 학생이라면 터널 내부에서는 차선이 파선이 아닌 실선으로 되어 있다는 것을 알고 있을 것이다. 이는 차선을 변경할 수 없음을 말하는 것이고, 따라서 터널 내부에서의 추월은 불가능하다. 소문난 명콤비 경찰 대근이와 영식이가 추월하는 차량을 잡기 위해 한 터널에 투입되었다. 대근이는 터널의 입구에, 영식이는 터널의 출구에 각각 잠복하고, 대근이는 차가 터널에 들어가는 순서대로, 영식이는 차가 터널에서 나오는 순서대로 각각 차량 번호를 적어 두었다. N개의 차량이 지나간 후, 대근이와 영식이는 자신들이 적어 둔 차량 번호의 목록을 보고, 터널 내부에서 반드시 추월을 했을 것으로 여겨지는 차들이 몇 ..
📕문제 보영이는 알고리즘 동아리 HI-ARC를 운영하고 있다. 보영이와 운영진 일동은 20년도에 입학하는 신입생들을 맞이하기 위해 열심히 준비를 해왔으나, 전염병의 유행이 악화된 나머지 정부에서는 “사회적 거리두기”를 선언했고 그에 따라 학교에서는 교내 모든 동아리에 오프라인 모임을 자제하라는 공지를 하기에 이르렀다. 오프라인에서 모임을 자제하라는 권고가 나온 어려운 상황에도 불구하고, 보영이는 기지를 발휘하여 개강총회를 미튜브 스트리밍으로 대체하는 결정을 하게 된다. 하지만, 미튜브 스트리밍으로 개강총회를 하게 될 경우, 아래와 같은 문제가 있었다. 누가 개강총회에 왔는지 알 수 없다. 누가 개강총회 자리에 끝까지 남아있었는지 알 수 없다. 어떤 사람이 개강총회 스트리밍을 단순히 틀어놓기만 했는지 알 ..
루프의 시작이나 끝 부분이 아닌 중간에서 종료 조건을 검사하면 편리할 수 있다. 이런 경우를 위해 코틀린은 몇 가지 식을 제공한다. break는 즉시 루프를 종료시키고, 실행 흐름이 루프 바로 다음 문으로 이동하게 만든다. continue는 현재 루프 이터레이션을 마치고 조건 검사로 바로 진행하게 만든다. 말로만 들으면 서로의 의미가 무엇인지 아마 헷갈릴 수 있다. fun main() { val a=IntArray(10) {it} var sum=0 for(x in 0..10){ if(x==5){ break; } print(x); //0,1,2,3,4 } } 위 경우에는 x가 5가되는 순간 break를 만나서 for문이 강제로 종료된다. fun main() { val a=IntArray(10) {it} v..
코틀린에서의 반복문은 세 가지 제어 구조를 제공한다. 📕do- while fun main(){ var sum=0 var n=0 do{ n=readLine()!!.toInt() sum+=n }while(n!=0) println("Sum: $sum") } do 와 while 키워드 사이에 있는 루프 몸통을 실행한다. while 키워드 다음에 있는 조건을 평가한다. 이 값이 참이면 1번 단계로 되돌아가고, 이 값이 거짓이면 루프 문 다음에 있는 문을 실행한다. 루프 몸통을 실행한 후에 조건을 검사하기 때문에 루프 몸통이 최소한 한 번은 실행한다는 사실을 유의해야 한다.! 📕while fun main(){ val num = Random.nextInt(1,101) var guess =0 while(guess!=n..