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

문제 https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 문제풀이 스티커는 하나를 골랐으면 바로 옆 대각선 1칸의 스티커밖에 고르지 못한다. 또는 오른쪽 스티커를 아예 고르지 않고 2칸 옆에 있는 스티커를 고를 수 있다. 왼쪽부터 오른쪽으로 진행하면서 스티커를 고른다고 가정해보자. 가운데에 있는 70원짜리를 고르려고 할 때, 50+70=120의 경우와 30+10+70=110의 경우가 있다. 이를 식으로 세우면 DP[1][x]=70 + m..

문제 https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 문제풀이 N이 90까지니까 개수가 별로 안 크겠지라고 생각하고 int형 배열을 사용했다가 틀리고 long long형으로 고치고 맞았다. DP문제는 웬만하면 long long형을 쓰는 게 나을 것 같다. 이 문제에는 규칙이 있다. 1. 첫 번째 숫자는 무조건 1로 시작한다. 2. 1로 연속된 숫자는 불가능하다. 1, 2번을 합치면 모든 이친 수는 10으로 시작한다는 것을 알 수 있다..

문제 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 문제풀이 처음에 DFS로 풀었는데 계속 시간 초과가 뜨길래 질문을 보니 가중치 없는 최단거리는 BFS로 풀어야 된다는 글을 봤다. https://www.acmicpc.net/board/view/27386 그래서 코드를 지우고 다시 BFS로 풀었다. 다음 칸을 갈 때 방문했으면 현재 거리가 최단거리일 때만 다음칸으로 이동하고, 방문을 하지 않은 칸이라면 방문을 하게 했..

문제 https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 문제풀이 DFS보다 BFS로 푸는 것이 좋아 보여서 BFS로 풀었다. 단순히 큐에 각 노드 번호와 촌수를 넣고 연결된 노드를 모두 큐에 넣었으면, 다음으로 넘어가고 이전 노드를 pop 하여 큐에서 삭제하는 방식이다. 큐가 비어있지 않은 상태로 원하는 노드에 도착하면 촌수를 return 하여 촌수를 출력하고, 큐가 비게 되어 반복문이 종료되면 노드가 연결되어있지 않아 촌수를..

문제 https://www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제풀이 처음에는 단순히 DP[10] = DP[10-1] + DP[10-2] + DP[10-5]를 하려고 했다. 하지만 이렇게 누적시키게 되면 숫자 구성은 같지만 순서만 다른 것도 포함이 되므로 틀린 답이다. 동전 단위 개수만큼 반복문을 돌리고, n원부터 k원 까지 DP[x] = DP[x-n]값을 누적시킨다. 처음 n원으로 n원을 만들때 DP[n]=DP[n-n]일 때, DP[0]의 값을 사용하..

문제 https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 문제풀이 정렬의 중요성을 모르고 풀다가 계속 틀리길래 반례를 찾아보다가 정렬을 해야 된다는 댓글을 보고 정렬을 추가했다. lost에는 잃어버린 학생의 번호, reserve에는 여벌의 체육복이 있는 학생의 번호가 들어있다. 체육복을 빌리거나 빌려주면 해당 배열에 있는 학생 번호의 값을 0으로 바꾼다. 총 학생수 - 도난당한 학생수를 한 후 체육복을 얻을 때마다..

문제 https://programmers.co.kr/learn/courses/30/lessons/77484 코딩테스트 연습 - 로또의 최고 순위와 최저 순위 로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호 programmers.co.kr 문제풀이 lottos의 숫자와 win_nums의 숫자가 같은 개수를 찾는 문제이다. 실제 로또와 다른 점은 0이 있다는 점이다. 만약 0이 당첨숫자이면 최고 순위, 0이 당첨숫자가 아니면 최저 순위이다. 따라서 0이 아닌 수 일 때는 둘의 번호가 일치하는지 확인하고, 0인 수가 있으면 따로 변수를 지정하여 개수..

문제 https://programmers.co.kr/learn/courses/30/lessons/12950 코딩테스트 연습 - 행렬의 덧셈 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요 programmers.co.kr 문제풀이 행렬의 같은 행, 열끼리 덧셈만 하면 된다. solution이 벡터형 함수이므로 두 개의 2차원 벡터를 선언한다. (arr1, arr2) 입력받는 함수의 열 크기, 행 크기만큼 for문을 돌리면서 덧셈을 한 후 push_back()을 이용하여 2차원 벡터 answer를 구성한다. 코드 #include #include ..

문제 https://programmers.co.kr/learn/courses/30/lessons/12969 코딩테스트 연습 - 직사각형 별찍기 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수 programmers.co.kr 문제풀이 이중 for문으로 n번만큼 *을 출력하고 "\n" 하고 m번만큼 반복한다. 코드 #include using namespace std; int main(void) { int n=0, m=0; cin >> n >> m; for(int y=0;y