본문 바로가기

코딩/코딩테스트 연습

(6)
[C++/Programmers] Lv2. 프렌즈 4 블록 코테 연습을 하다가 기록 해 두면 좋을 것 같아서 블로그에도 백업? 해 두려고 한다. 문제 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙어있을 경우 사라지면서 점수를 얻는 게임이다. 만약 판이 위와 같이 주어질 경우, 라이언이 2×2로 배치된 7개 블록과 콘이 2×2로 배치된 4개 블록이 지워진다. 같은 블록은 여러 2×2에 포함될 수 있으며, 지워지는 조건에 만족하는 2×2 모양이 여러 개 있다면 한꺼번에 지워진다. 만약 빈 공간을 채운 후에 다시 2×2 형태로 같은 모양의 블록이 모이면 다시 지워지고 떨어지고를 반복하게 된다. 위 초기 배치를 문자로 표시하면 아래와 ..
[C++/Baekjoon] ACM 호텔 스스로 생각하며 시행착오를 좀 거친 문제여서 블로그에 기록 해 두고자 한다. 문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘..
[C++/Programmers] Lv2. 피보나치 수 Lv2 문제이다. 단순하게 피보나치 수를 구하는 함수를 만들어 주면 된다. 생각 해 보기 피보나치 수는 기본적으로 재귀함수를 이용한다. 그런데 처음에 재귀함수를 사용하니 시간초과가 나게 되어 아래와 같이 동적 프로그래밍을 사용하였다. #include #include using namespace std; int func(int input,vector& info){ info[0] = 0; info[1] = 1; for(int i = 2;i
[C#/Programmers] Lv2. 방문 길이 Lv2 문제이다. Winter Coding 에서 테스트로 나왔던 기출문제이다. 문제가 좀 길다. 생각 해 보기 문제는 길긴 하지만 생각보다는 별거 없다. 우선, 좌표계가 한정되어 있고, 이미 갔던 길을 중복해서 체크하지 않아야 하기 때문에 별도로 체크를 해 주는 자료구조를 하나 만들어야 함을 생각해야 한다. 나는 이차원 배열 두 개를 만들어 주었다. 왜 두개를 만들었냐 하면 좌표계의 한 점에서 갈 수 있는 것이 상, 하, 좌, 우의 네 가지 길이 있다. 상/하를 한 세트로 해서 갔던 길을 저장하는 배열 하나, 좌/우를 한 세트로 해서 갔던 길을 저장하는 배열을 하나 만들어 주었다. 즉, 위 그림과 같이 좌표에서 오른쪽길을 통과했는지 여부를 담는 Right 배열, 위쪽 길을 통과했는지 여부를 담는 Up배열..
[C++/Programmers] Lv2. 영어 끝말잇기 Lv2 문제이다. 끝말잇기 탈락자를 가려내며, 몇 번째 탈락자인지 가려내는 것이 목적이다. 끝말잇기의 기본 조건은 앞에 있는 문자열의 맨 뒤 문자와 뒤에 있는 문자열의 맨 앞 문자가 같아야 하며, 뒤에 말한 단어가 앞서 말했던 단어들이랑 같지 않아야 한다. (단어가 겹치지 않아야 함) #include #include #include using namespace std; vector solution(int n, vector words) { vector answer; vector cnt; int order = 0; // 끝말잇기 순서 for(int i=0;i
[C++/Programmers] Lv1. 최소직사각형 코딩테스트 연습도 하면서 이것도 기록하게 되면 좋을 것 같아 이제부터 기록하려 한다.. 어떻게 풀어냈었는지, 어떻게 접근하는지에 중점을 둘 계획이다. 최소 직사각형 레벨 1의 문제인데.. 접근을 잘못하게 되면 고생을 좀 하게 될 것이다. 가로 길이와 세로 길이라고 적어 놓은 것이 문제 풀이의 사고를 딱딱하게 만들어 주는 주 요인이라고 생각한다.. 처음에 내가 생각했던 것은 가로 길이와 세로 길이를 따로 벡터에 저장 해 두고, 가장 큰 값을 회전시켜 넓이를 줄이는 것(..)으로 하였다. 그런데 완전 발상 자체가 틀렸었다.. 문제에 나온 예시를 통해 보도록 하겠다.. ppt를 이용하여 실제 값을 주어 사이즈대로 그려 보았다. 모서리를 왼쪽 아래로 맞추어 주게 되면 위 그림과 같은 상태가 되게 된다. 여기서 ..