목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/1076 1076번: 저항 전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다. 처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다. 저항의 값은 다음 표를 이용해서 구한 www.acmicpc.net 코드 #include #include #include int main() { char S[10][7] = { "black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white" }; char s1[7], s2[7], s3[7]; long int R = 0; scanf("%s %s %s", s1, s2, s3); f..
https://www.acmicpc.net/problem/1015 1015번: 수열 정렬 P[0], P[1], ...., P[N-1]은 0부터 N-1까지(포함)의 수를 한 번씩 포함하고 있는 수열이다. 수열 P를 길이가 N인 배열 A에 적용하면 길이가 N인 배열 B가 된다. 적용하는 방법은 B[P[i]] = A[i]이다. 배열 A가 주 www.acmicpc.net 코드 #include #include #include using namespace std; vector A, P; bool cmp(pair a, pair b) { return a.second < b.second; } int main() { int N, n; scanf("%d", &N); for (int i = 0; i < N; i++) { sc..
https://www.acmicpc.net/problem/1051 1051번: 숫자 정사각형 N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 www.acmicpc.net 코드 #include int N, M, A[50][50]; int get_S() { int size, v; size = N > M ? M - 1 : N - 1; // 배열에서의 이동을 위해 while (1) { for (int i = 0; i < N - size; i++) { for (int j = 0; j < M - size; j++) { v = A[i][j]; if (A[i + size][j]..
https://www.acmicpc.net/problem/1024 1024번: 수열의 합 첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 L개의 정수를 더해 N이 되어야 하므로 그 수들은 N/L 부근에 있다. 따라서 mid=N/L로 두고 L이 짝수/홀수일 때 리스트가 달라지므로 그 경우로 나눴다. 이 때 시작 지점(s)과 끝 지점(e)을 구해 에러 조건 판별( -1 출력)과 출력에 사용했다. (에러 검증은 반복문 안에서 수행해야 시간초과가 나지 않는다)또한 L이 짝수일 경우 3 4 5 6 7 8 처럼 가운데 두 수의 합과 mid-n, (mid+1)+n의 합은 동일하고..
https://www.acmicpc.net/problem/1094 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net 풀이 막대기의 길이를 계속 2로 나눠주고, X보다 짧을 때만 sum에 더해주는 방식으로 문제에서 주어진 과정을 반복함. 코드 #include int main() { int X, stick = 64, sum = 0, cnt = 0; scanf("%d", &X); while (sum != X) { if (stick == X) { cnt = 1; break; } stick /= 2; // stick..
https://www.acmicpc.net/problem/1058 1058번: 친구 지민이는 세계에서 가장 유명한 사람이 누구인지 궁금해졌다. 가장 유명한 사람을 구하는 방법은 각 사람의 2-친구를 구하면 된다. 어떤 사람 A가 또다른 사람 B의 2-친구가 되기 위해선, 두 사람 www.acmicpc.net 풀이 i와 j가 친구일 때, j와 친구인 k도 i와 친구이다.F배열의 값을 바꾸면 예제 4의 답이 틀리게 나와서 2-친구 관계를 표현한 visited배열을 추가함. 코드 #include bool F[50][50], visited[50][50]; int Friend(int now, int N) { int max = 0, cnt; for (int i = 0; i < N; i++) { cnt = 0; fo..
https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 코드 #include int prize[50][2]; int Get_Min(int n, int min6, int min) { int price = 0; //낱개의 가격이 더 쌀 때 if (min6 > min * 6) return min * n; price += (n / 6)*min6; n %= 6; if (min6 < min*n) price += min6; else price += n * mi..
https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 풀이 처음엔 재귀로 풀었는데 시간초과가 발생함.B는 재배열하면 안 되지만 출력은 최솟값만 하기에 A,B를 각각 오름차순, 내림차순으로 정렬한 후 각 원소끼리 곱한 결과값이 최솟값이다. 코드 - 답안 코드 #include #include using namespace std; int main() { int N, val = 0; int A[50], B[50]; scanf("%d", &N); fo..