목록Baekjoon (177)
GitHubSeob

문제 https://www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 www.acmicpc.net 문제풀이 D는 2n , 단 10000이 넘으면 나머지 연산을 한다. S는 n-1, n이 0이라면 n-1=9999 L은 d1 d2 d3 d4 -> d2 d3 d4 d1 R은 d1 d2 d3 d4 -> d4 d1 d2 d3 주의할 점은 123 이면 L연산을 하면 1230, R연산을 하면 3012가 된다. 처음에는 string형으로 변환하고 swap 해서 바꾸고 그랬지만 시간이 오래 ..

문제 https://www.acmicpc.net/problem/1963 1963번: 소수 경로 소수를 유난히도 좋아하는 창영이는 게임 아이디 비밀번호를 4자리 ‘소수’로 정해놓았다. 어느 날 창영이는 친한 친구와 대화를 나누었는데: “이제 슬슬 비번 바꿀 때도 됐잖아” “응 지금 www.acmicpc.net 문제풀이 A에서 B로 숫자를 바꾸는 과정에서도 항상 소수를 유지해야 한다. 먼저 에라토스테네스의 체를 이용하여 소수를 구한다. prime벡터는 소수가 아니면 false를, 소수이면 true이다. 숫자를 바꿀 때 임시로 int형에서 string형으로 바꾸고 이중 반복문으로 모든 자리를 0부터 9까지 바꾼다. 바꾼 번호가 목표하는 번호와 같다면 cnt+1을 하여 출력해준다. 그렇지 않다면 다시 int형으..

문제 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 문제풀이 BFS를 이용해 풀었다. 방문 함수를 만들어 같은 곳을 재방문하지 않도록 했다. 2열짜리 큐를 만들어 현재 위치, 몇번 이동했는지를 나타낸다. 점은 100,000까지 있으므로 더 넘지 못하고, 각각 제한을 걸어 효율적으로 이동할 수 있게 한다. 코드 #include #include #include using namespace std; vectorvisit(..

문제 https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j www.acmicpc.net 문제풀이 DFS로 풀었고, 1차원 방문 벡터를 이용한다. 처음에 출발하는 도시, 현재 위치한 도시, 비용, 방문 배열을 인자로 받는 함수 Move를 만든다. Move는 매번 방문 벡터를 돌면서 가지 않은 도시가 있는지 체크를 한다. 모든 도시를 돌았고, 현재 있는 도시가 처음에 출발한 도시였고, answer값 보다 작으면 answer값을 경신한다...

문제 https://www.acmicpc.net/problem/10819 10819번: 차이를 최대로 첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다. www.acmicpc.net 문제풀이 두 가지방법으로 문제를 풀었다. 첫번째는 에 있는 모든 순열의 경우의 수를 알려주는 next_permutation 함수를 이용했다. 두번째는 오름차순으로 정렬해서 벡터를 반으로 나누고 계산하고, 내림차순으로 정렬해서 벡터를 반으로 나누고 계산을 해서 큰 값을 출력했다. 코드 1) #include #include #include #include using namespace std; int main(..

문제 https://www.acmicpc.net/problem/1451 1451번: 직사각형으로 나누기 첫째 줄에 직사각형의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 직사각형에 들어가는 수가 가장 윗 줄부터 한 줄에 하나씩 M개의 수가 주어진다. N과 M은 100보다 작거나 같은 자연수이 www.acmicpc.net 문제풀이 첫 번째 직사각형, 두 번째 직사각형이 될 수 있는 모든 경우를 구한다. 세 번째 직사각형은 첫 번째, 두 번째 직사각형을 만들 때 사용하지 않은 칸으로 만든다. Div1은 첫 번째 직사각형, Div2는 두 번째 직사각형, Div3은 세 번째 직사각형을 만드는 함수이다. 먼저 첫 번째 직사각형을 만든다. 이중 for문을 돌려 y는 0부터 N까지, x는 0부터 M까지 돌..

문제 https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net 문제풀이 시작 채널은 100이기 때문에 + or - 버튼을 일일이 누른 횟수를 answer에 저장한다. N길이를 구하고, N-1 길이의 첫수부터 N+1 길이의 마지막 수까지 돌면서 해당수를 판별한다. N의 최댓값은 500,000 이므로 최대로 돌려봐야 하는 수는 N+1 길이의 끝수이거나 1,000,000이다. 먼저 길이를 구하고, N번호까지 리모컨을 누르는 횟수가 answer..

문제 https://www.acmicpc.net/problem/1476 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 문제풀이 나머지를 이용하면 쉽게 풀 수 있다. E는 1~15, S는 1~28, M은 1~19이다. 세 수는 0이 될 수 없으므로 각각 최댓값으로 나누고 1을 더한 값이 문제에서 요구한 값들이라면 year+1을 출력한다. 값이 다르면 year에 1을 더한다. 코드 #include using namespace std; int main() { int E, S, M = 0; cin >> E >> S >>..

문제 https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 문제풀이 음수, 0, 양수를 나눠서 생각해야 하는 문제이다. 먼저 숫자들이 있으면 절댓값이 가장 큰 숫자들끼리 곱하여 더하는 것이 가장 큰 값을 구하는 과정이다. 따라서 음수는 오름차순으로 정렬하여 두 수를 곱하고 합 변수 sum에 더한다. 음수 한 개와 0이 남은 경우는 곱하여 0으로 만드는 것이 더 큰 값이므로 음수와 0은 모두 음수를 저장하는 우선순위큐에 입력한다. 양수도 비슷하게 하..