본문 바로가기

Algorithm48

2020 카카오 인턴 - 키패드 누르기 programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr 오늘은 곧 있을 카카오 인턴십을 대비해 문제를 풀어보았다. 먼저 제일 쉽다고 하는 문제인 첫 번째 문제. (사실 이것도 어렵게 풀었다) 문제를 보자. 문제 설명 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 .. 2021. 5. 5.
15688 수 정렬하기 5 (C++) 이번에는 정렬 파트의 문제를 풀었다. 시뮬레이션 문제가 너무나도 어려워서 일단은 하나씩 차근차근. 일단 이 문제는 단순히 sort() 함수를 가지고 풀 수 있는 문제가 아니었다. 나 또한 "아 ㅋㅋ sort() 함수 만세!" 하면서 풀다가 시간초과라는 벽을 만나게 됐다. 이 문제는 Counting Sort의 원리를 이용하여 풀어야 한다. Counting Sort는 각 자리의 수가 얼마나 있는지 카운트를 하고 배열에 저장 시킨 뒤, 비내림차순일 경우 차례대로 각 배열의 개수만큼 출력 시키면 되는 정렬이다. #include using namespace std; #define MX 2000001 #define endl '\n' int freq[MX]; int n; int main() { ios::sync_wi.. 2021. 5. 4.
15683 감시 (C++) #include using namespace std; #define X first #define Y second int board1[10][10]; // 원래 보드 작성 칸 int board2[10][10]; // 사각 지대의 개수를 세기 위한 보드 int n,m; int dx[4] = {1,0,-1,0}; int dy[4] = {0,1,0,-1}; vector cctv; bool OOP(int a,int b) { return a = n || b = m; } // (x,y)에서 dir 방향으로 진행하며 벽을 만나기 전까지 지나가는 모든 칸을 7로 바꿈 void func(int x, int y, int dir) { dir %= 4; while(1) { x += dx[di.. 2021. 5. 1.
6593 상범 빌딩 (C++) 하....아.... 뭐같은 문제...라고 하기엔 내 실수가 너무나도 커서... 아무튼..이 문제는 여느 BFS문제와 똑같이 BFS로 풀면 되는 문제였다. 정육면체로 이루어진 빌딩에서 동,서,남,북,상,하 로 총 6개의 방향으로 움직일 수 있고, 그 움직이는 횟수에 따라 1분이 소요된다. 라고 나와있다. 그 말인 즉슨, 조건에 맞는 이동을 했을 경우 시간을 1 늘려주면 된다. 만일 이동할 수 없거나 E에 도달하지 못하면 Trapped! 가 뜨게 하면 된다. 그리고 0,0,0 좌표를 입력하면 종료하는 조건으로 이 프로그램을 종료 시키면 된다. 근데 저 무수히 찍힌 틀렸습니다는 사실 로직은 맞았지만, 출력문이 이상해서 틀렸습니다가 뜬거다. 근데 난 1시간이상을 내 로직에 문제가 있나? 뭐가 문제지? 라며 온갖.. 2021. 4. 28.
15656 N과M (7) (C++) N과 M 시리즈 문제가 생각보다 재밌다. (뭐 잘 풀려서 그런거지..이러다가 안풀리면 재미없다고 한다 또) 아무튼. 이 문제는 itlearning.tistory.com/entry/15651-N%EA%B3%BC-M3-C 15651 N과 M(3) (C++) 음... 일단 내가 생각한건 이거다... 기존의 백트래킹은, 그냥 한번 올라가거나, 뿌리 내려지기 전의 수부터 시작을 하지 않는다고 생각했다. 그래서 아얘 그냥 위부터 쭈우우우욱 올라가서 다시 itlearning.tistory.com 이 문제와 똑같다. 단지 수열을 내가 입력하는 것이 추가된 것 뿐. 그래서 이 문제의 답을 참고해서 코드를 작성했다. 문제의 해결법은 이렇다. 원하는 수열을 입력받고, 입력받은 수열을 배열에 저장한 뒤, 출력하는 수열을 따로.. 2021. 4. 26.
15654 N과M (5) (C++) 아 점점 손에 익어간다 진짜로... 어떻게 구동 되는지 보인다.. 거두절미하고. 이 문제는 기존에 입력이 N개의 자연수 중에서 M개의 수열을 출력하는 것이었다면, 이건 수열을 직접 골라서 출력해야 한다. 그리고 그냥 수열을 나열하는게 아니라, 사전 순으로 증가하는 순서로 출력까지. 근데 이건 생각보다 간단하다. 그냥 입력을 받을 board[] 배열 하나, 받은 입력을 순열로 표현할 arr[] 배열. 그리고 방문의 여부를 확인해주는 isused[] 배열을 이용하면 끝이다. #include using namespace std; #define endl '\n' int n,m; int board[10]; int arr[10]; int isused[10]; void func(int k) { if(k == m) {.. 2021. 4. 25.

IT_learning's Commit