#INFO 문제이름 : 키패드 누르기 난이도 : LEVEL1 문제 출처 : 2020 카카오 인턴십 코딩테스트 연습 - 키패드 누르기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 키패드 누르기 [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 #SOLVE 문제가 주어진 조건대로 따라가기만 하면 쉽게 풀리는 문제였다. 우선 왼손 엄지손가락의 위치를 저장할 leftHand 변수와 오른손 엄지손가락의 위치를 저장할 ..
#INFO 문제이름 : 정수 제곱근 판별 난이도 : LEVEL1 문제 출처 : 코딩테스트 연습 - 정수 제곱근 판별 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 정수 제곱근 판별 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함 programmers.co.kr #SOLVE 1. sqrt 제곱근 함수를 이용한 풀이 cmath 라이브러리의 sqrt 제곱근 함수를 이용한 풀이이다. #include #include #include using namespace std; long long solution(long long n) { b..
#INFO 난이도 : SILVER4 문제유형 : 탐색 알고리즘 출처 : 1764번: 듣보잡 (acmicpc.net) #SOLVE 처음에는 시간제한(2s)를 고려하지 않고 단순히 이중 for문을 돌려 두 배열(듣도 못한 사람의 이름, 보도 못한 사람의 이름)을 비교하여 탐색하였더니 시간 초과가 발생하였다. int cnt = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(str1[i] == str2[j]) { ans.push_back(str1[i]); cnt++; } } } 따라서 이진탐색 알고리즘(binary_search)을 이용해 문제를 풀이하였다. 단 조심해야 할 부분은 이진 탐색 알고리즘은 배열의 원소가 정렬 되어 있어야 탐색이 가능하기..
#INFO 난이도 : GOLD4 문제유형 : BFS 출처 : 2638번: 치즈 (acmicpc.net) 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net #SOLVE 치즈배열 전체를 BFS 알고리즘을 이용해 여러번 탐색하며 외부 공기와 2면 이상 접촉하는 치즈를 삭제해 주는 방식으로 풀이하였다. 예를들어 다음과 같은 케이스에서 치즈 블록과 외부 공기 블록이 2면 이상 겹치기에 C블록을 삭제해준다. // 외부 공기와 2면 이상 접촉 시 삭제 for(int i = 0; i < n; i++){ for(i..
#INFO 난이도 : GOLD5 문제유형 : 백트래킹 출처 : 1759번: 암호 만들기 (acmicpc.net) 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net #SOLVE 간단한 백트래킹 문제이다. 알파벳을 저장할 alpha 배열을 선언한 뒤, sort함수를 이용해 알파벳을 오름차 순으로 정렬한다. 다음으로 백트래킹 알고리즘을 이용하여 알파벳이 증가하는 순서로 출력되도록 설정하면 된다. 단, 암호는 서로다른 L개의 알파벳 소문자로 구성되며, 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 ..