목록분류 전체보기 (370)
GitHubSeob

문제 https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 문제풀이 숫자 카드 문제와 다른 점은 숫자가 겹칠 수도 있다는 점이다. 숫자 카드 문제에서 이분 탐색 중에 상근이의 카드와 확인해야 하는 카드값이 같으면 그 인덱스를 기준으로 왼쪽으로, 오른쪽으로 가면서 같은 숫자가 있는지를 탐색하도록 했는데 시간 초과가 뜨길래 검색해보다가 훨씬 좋은 방법을 찾았다. 바로 upper_bound와 lower_bound이다. 정..

문제 https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 문제풀이 상근이가 가지고 있는 카드 card, 가지고 있는지 확인하는 check 벡터 두 개를 이용한다. 확인하는 카드 수만큼 반복하면서 이분 탐색을 한다. 상근이의 카드들을 정렬시켜야 이분 탐색이 가능하다. 확인 카드를 들고 상근이의 카드 목록을 보면서 이 카드가 있는지를 확인한다. low와 high를 가지고 가운데인 mid값을 도출하면서 상근이의 카드[mid..

문제 https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 문제풀이 문제는 길지만 단계 하나씩 코드를 작성하면 쉽게 풀 수 있다. 먼저 알파벳, 숫자, -, _, . 일 때만 answer벡터에 push 한다. answer의 끝, 끝-1 부분이 . 이라면 끝부분을 지워 .가 하나만 있게 한다. 맨앞이 .이라면 erase를 통해 벡터 맨 앞 원소만 지운다. 맨뒤가 .일때도 마찬가지이다. answer베터가 비어있..

문제 https://programmers.co.kr/learn/courses/30/lessons/12977 코딩테스트 연습 - 소수 만들기 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 programmers.co.kr 문제풀이 처음에 비트 마스크 문제인 줄 알았는데 다시 보니 서로 다른 숫자 3개를 고르는 문제였다. 따라서 for문을 중첩해서 num1: nums[0]~ num2: nums[1]~ num3: nums[2]~ 이런 식으로 구하면 되겠다는 생각을 했다. 그리고 반복하면서 숫자 3가지를 더해주고 for문으로 1부터 sum의 제곱근까지 반복하면..

문제 https://programmers.co.kr/learn/courses/30/lessons/70128 코딩테스트 연습 - 내적 길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요. 이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 programmers.co.kr 문제풀이 내적을 모르고도 풀 수 있다. a와 b의 같은 위치에 있는 원소들을 곱하고 그 곱들의 합을 출력하면 된다. 코드 #include #include using namespace std; int solution(vector a, vector b) { int answer ..

문제 https://programmers.co.kr/learn/courses/30/lessons/81301 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 문제풀이 s[0]부터 s의 크기만큼 반복하면서 z로 시작하면 num에 0을 push 한다. zero는 4글자이고 if문이 종료되면 for문의 조건으로 인해 i가 +1 되므로 if문에서 i+=3을 해서 zero 다음 문자열부터 for문을 돌게 한다. 마찬가지로 다른 문자들도 이런 식으로 if문으로 조건을 걸어준다. 마지막으로 숫자가 들어온다면 그냥..

문제 https://programmers.co.kr/learn/courses/30/lessons/42748 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr 문제풀이 array의 i번째 수부터 j번째 숫자까지 자르고, 자른 숫자를 오름차순으로 정렬하고 k번째 숫자를 return 하는 문제이다. i는 commands의 행수만큼, 배열은 0부터 시작이므로 commands[i][0]-1부터 commands[i][1]-1까지 int형 벡터 number에 push 한다. 숫자를 i번째부터 j번째까지 잘랐으므로 sort로 오름차순으로 정렬한다. 정렬이 끝났으면 number의 command..

문제 https://www.acmicpc.net/problem/14225 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 www.acmicpc.net 문제풀이 비트 마스크를 이용하여 풀었다. 숫자가 1, 2, 3을 입력받았을 경우, 1, 2, 3, 1+2, 1+3, 2+3, 1+2+3의 7가지 경우가 있다. 1부터 7까지의 이진수를 표현하고, 0인 부분은 더하지 않고 1인 부분만 더하게 되면 부분 수열의 합을 모두 구할 수 있다. 자연수는 1부터 이므로 i=1부터, 1 N..

문제 https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 문제풀이 현재 위치에서 바라보는 방향 기준 왼쪽부터 반시계 방향으로 돌면서 청소할 칸을 확인한다. 청소할 칸이 있으면 청소할 칸 쪽으로 회전을 한 뒤 한 칸 이동한다. 벽이거나 청소할 칸이 없으면 다시 회전을 한다. 네 방향을 탐색했으면 90도의 회전이 총 네 번 있었으므로 방향이 처음 방에 들어온 상태로 된다. 뒷 칸이 벽이면 작동을 멈춘다. 뒷 칸이 벽이 아니면 뒤로 한 칸 이동한다. ..