CodingTest
[카카오] 양궁대회 (java)
문제링크 https://programmers.co.kr/learn/courses/30/lessons/92342 코딩테스트 연습 - 양궁대회 문제 설명 카카오배 양궁대회가 열렸습니다. 라이언은 저번 카카오배 양궁대회 우승자이고 이번 대회에도 결승전까지 올라왔습니다. 결승전 상대는 어피치입니다. 카카오배 양궁대회 운영위원 programmers.co.kr 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 브루트포스 (Test-Case 8번과 18번이 해결이 되지 않은 풀이입니다..) 양궁 문제를 브루트 포스로 해결하려고 시도하였다. 어피치와 라이언이 양궁을 진행하는데, 어피치가 각 점수에 맞춘 화살의 개수보다 1개만 많으면 해당 점수를 라이언이 가져간다. 라이언이 점수차를 가장 크게해서 이기는 방법을 찾는 문제이다. 먼저..
[카카오] k진수에서 소수 개수 구하기 (java)
문제링크 https://programmers.co.kr/learn/courses/30/lessons/92335# 코딩테스트 연습 - k진수에서 소수 개수 구하기 문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소 programmers.co.kr 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 소수, 재귀 n으로 주어진 숫자를 k진수로 변경한 후 0을 오른쪽 또는 왼쪽으로 가지고 있는 수들이 소수인지 판단하여 개수를 구해주는 문제이다. 10진수인 n을 k진수로 변경하는 방법은 재귀와 나누기 그리고 %연산을 활용하여 만들 수 있다. %연산을 하여 구한 m..
[카카오] 주차 요금 계산 (java)
문제링크 https://programmers.co.kr/learn/courses/30/lessons/92341 코딩테스트 연습 - 주차 요금 계산 [180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000] programmers.co.kr 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 구현, Map 주차요금계산 문제는 입력으로 들어오는 주차에 대한 record정보로 하루동안 차량의 출입 여부로 시간을 계산하여 그 날동안 ..
[카카오] 단체사진찍기 (java)
문제링크 https://programmers.co.kr/learn/courses/30/lessons/1835 코딩테스트 연습 - 단체사진 찍기 단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두 programmers.co.kr 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 브루트포스 순열 카카오 프렌즈 캐릭터 8명이 원하는 순서대로 사진을 찍을 수 있는 횟수를 구하는 문제이다. 캐릭터가 순서대로 서는 경우의수는 8!이며 최대로 들어올 수 있는 조건이 100개이다. 따라서 최악의 경우 $O(8!*100)$의 시간이 걸리게 된다. 따라서, 브루트포스로 문제를 해결할 수 있다. 순열로 문..
[카카오] 오픈채팅방 (java)
문제링크 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 Map, 구현 카카오 오픈채팅방의 입장과 퇴장의 로그를 리턴해주는 문제이다. 닉네임을 변경하는 경우에는 과거의 입장 및 퇴장의 닉네임도 변경해주어야 한다. 닉네임을 변경하는 방법은 다시 입장시 혹은 방 안에서 변경이 가능하다. 닉네임은 Map을 활용하여 id와 닉네임을 매핑시켜주었다. 모든 record를 확인하여 출력해주어야할 log는 가변배열인 ArrayList를 사용해서 넣어주었고, 닉네임이 변경될 수 있는 경우..
[카카오] 신고 결과 받기 (java)
문제링크 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 Set(집합) 신고 결과 받기 문제는 유저들이 신고를 하는 정보를 확인하고 신고를 당한 횟수가 k 이상일 경우 정지를 주게 되는데, 그 때 정지를 받은 유저를 신고한 유저에게 알람을 준다면 알람을 받을 횟수를 확인하는 문제이다. 이 때 한 유저가 동일한 사람을 중복으로 신고하면 한번으로 처리를 해야한다. 이 조건을 만족시키기 위하여 나는 집합을 사용하여 구현하였다. 집합은 데이터를 중복없이 한개씩만 가지고 있..
[BOJ_4574] 스도미노쿠 (java)
문제링크 https://www.acmicpc.net/problem/4574 4574번: 스도미노쿠 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 채워져 있는 도미노의 개수 N이 주어진다. (10 ≤ N ≤ 35) 다음 N개 줄에는 도미노 하나를 나타내는 U LU V LV가 www.acmicpc.net 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 재귀, 브루트포스, 백트래킹 스도미노쿠는 스도쿠 + 도미노를 의미하는 게임이다. 스도쿠의 규칙을 지켜주며, 도미노(2개의 쌍으로 이루어진 값)을 놓아주어 스도쿠를 풀어주는 문제이다. 도미노는 $(1,2), (1,3) (1,4) ... (7,8) (7,9) (8,9)$ 까지 1부터 9까지의 모든 값의 쌍으로 이루어져 있다. 그런데 $(1..
[BOJ_16197] 두 동전 (java)
문제링크 https://www.acmicpc.net/problem/16197 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, www.acmicpc.net 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 브루트포스, 재귀 문제는 두 동전을 보드판에 올려놓고 상하좌우 중 한 곳으로 이동시켜 주어 하나의 동전만 떨어뜨리는 방법을 구하는 문제이다. 단, 동전이 움직일 때 벽을 만나게 되면 움직이지 못하며, 그 외의 경우에는 모두 움직여 줄 수 있다. 떨어지는 경우는 동전이 보드의 배열 밖으로 나가는(범위를 벗어나는) 경우가 된다. 이 문제를 브루트포스로 ..
BOJ_14888 연산자 끼워넣기 (Java)
문제링크 https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 브루트포스 연산자를 끼워 넣는 문제는 브루트포스로 해결하였다. 연산자의 개수는 숫자 배열의 크기 -1 이므로 최대 10개이다. 10개를 순서를 고려하여 나열하는 방법은 최대 10!이므로 시간초과 없이 해결할 수 있다. 따라서, 만들수 있는 모든 연산자의 경우의수를 만들어준 뒤 계산해 주면 쉽게 해..
[카카오] 카카오 프렌즈 컬러링북 (java)
문제링크 https://programmers.co.kr/learn/courses/30/lessons/1829 코딩테스트 연습 - 카카오프렌즈 컬러링북 6 4 [[1, 1, 1, 0], [1, 2, 2, 0], [1, 0, 0, 1], [0, 0, 0, 1], [0, 0, 0, 3], [0, 0, 0, 3]] [4, 5] programmers.co.kr 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 브루트 포스 문제에서는 영역의 개수와, 영역의 최대값을 물어보고 있다. 영역은 색칠을 해야하는 부분의 상하좌우 중 연결된 동일한 색상이어야 하며 0의 경우색칠을 하지 않는다. 따라서 나는 체크하는 배열을 만들어, 체크가 안된 부분 중 0이 아닌 부분을 체크하며 영역을 구분지었다. $n*m$크기의 배열을 모두 돌면서 아직..
[BOJ_16931] 겉넓이 구하기 (java)
문제링크 https://www.acmicpc.net/problem/16931 16931번: 겉넓이 구하기 크기가 N×M인 종이가 있고, 종이는 1×1크기의 칸으로 나누어져 있다. 이 종이의 각 칸 위에 1×1×1 크기의 정육면체를 놓아 3차원 도형을 만들었다. 종이의 각 칸에 놓인 정육면체의 개수가 주어 www.acmicpc.net 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 시뮬레이션, 구현 겉넓이를 모두 구해주는 문제이다. 윗면과 아랫면 그리고 옆면으로 나누어 구현을 해주면 된다. 윗면과 아랫면 윗면과 아랫면의 겉넓이를 구하는 방법은 매우 간단하다. 조건에서 주어진 $n*m$에 블럭이 1개 이상 들어가야하므로 항상 넓이는 $n*m$이 된다. 옆면 옆면의 넓이를 구하는 방법은 4방면으로 붙어있는 도형을 확인하..
[BOJ_2290] LCD Test (java)
문제링크 https://www.acmicpc.net/problem/2290 2290번: LCD Test 첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다. www.acmicpc.net 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 시뮬레이션 LCD Test 문제는 세그먼트로 생각하고 특정지점을 인덱싱하여 풀어주었다. 숫자를 표현해주어야하는 크기는 모두 동일하기 때문에 7-Segment와 동일하게 생각하여 해결해줄 수 있다. index를 잘 판단하여 A,B,C,D,E,F,G의 위치를 잡고 정해진 크기만큼 값을 넣어주기만 하면 된다. 그리고나서 0부터 9까지 각각 어느 지점의 세그먼트가 켜져야..
[BOJ_15685] 드래곤 커브 (Java)
문제링크 https://www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커 www.acmicpc.net 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 시뮬레이션 드래곤커브 문제를 봤을 때 굉장히 난해하다는 생각을 받았었습니다. 어떻게 그래프를 특정 점에서 90도씩 돌릴 수 있을까 고민을 많이 했는데, 생각해보니 그래프를 그릴 때 해당 점에서 어느 방향으로 이동하였는지만 알면 드래곤 커브를 구할 수 있었습니다. 드래곤 커브 문제는 특정 시작 점에서 시작 방향으로 1칸 이동하..
[BOJ_15662] 톱니바퀴 ( java)
문제링크 https://www.acmicpc.net/problem/15662 15662번: 톱니바퀴 (2) 총 8개의 톱니를 가지고 있는 톱니바퀴 T개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 객체 구현 톱니바퀴라는 객체를 구현하여 문제를 해결할 수 있습니다. 톱니바퀴 객체의 동작은 왼쪽 혹은 오른쪽으로 굴러가는 것입니다. 그리고 추가적으로 왼쪽 톱니바퀴와 만나는 지점의 톱니의 값과 오른쪽 톱니바퀴와 만나는 지점의 톱니의 값 그리고 맨 위 지점의 톱니가 N인지 S인지 알려줄 수 있습니다. 톱니를 돌리는 방법은 index를 변경해주..
[BOJ_14890] 경사로 (java)
문제링크 https://www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 문제풀이 👨🏻💻 핵심 스킬 👨🏻💻 구현,사고 경사로 문제를 해결하기 위해서 경사로의 조건을 충분히 이해하고 구현해주어야 합니다. 위 경우는 경사로에 놓을 수 있는 경우들을 의미합니다. 문제에서 제시되는 경사로의 길이만큼 충분히 같은 수의 길이 있을 경우 경사로를 놓을 수 있으며 경사로를 놓을 때는 항상 1만 차이가 나야합니다. 위 경우는 경사로에 놓을 수 없는 경우입니다. 높이 차이가 2 이상인 경우 경사로..
[BOJ_14499] 주사위 굴리기 (java)
문제링크 https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 문제설명 더보기 더보기 더보기 문제 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 2 4 1 3 5..
[BOJ_14226] 이모티콘 (java)
문제링크 https://www.acmicpc.net/problem/14226 14226번: 이모티콘 영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만 www.acmicpc.net 문제설명 더보기 더보기 문제 영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만들어 보려고 한다. 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다. 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다. 화면에 있는 이모티콘 중 하나를 삭제한다..
[BOJ_14226] 이모티콘 (java)
문제링크 https://www.acmicpc.net/problem/14226 14226번: 이모티콘 영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만 www.acmicpc.net 문제설명 더보기 더보기 문제 영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만들어 보려고 한다. 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다. 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다. 화면에 있는 이모티콘 중 하나를 삭제한다..