알고리즘/알고리즘 문제풀이 43

21922번: 학부 연구생 민상

2022.02.14 문제 출처: https://www.acmicpc.net/problem/21922 문제 분석: 문제의 조건에 따라 구현해 내는 구현 문제인것 같다. 문제 해결: 에어컨을 기준으로 상하좌우로 바람을 보내 바람이 물건을 만났을때 그에 해당하는 방향으로 회전 시켜주는 것을 구현하는 문제 물건 1,2 같은경우는 튕겨나가서 반대방향으로 가는것은 어차피 겹치기때문에 구현하지 않아도 되고 에어컨을 만나는 경우에는 그 에어컨에서 바람이 나올것이기 때문에 정지 해줘도 된다. 핵심은 방문처리를 하는 부분에서 방향에 따라 다르게 3차원으로 칠해야 되는 것 같다. 내 소스코드: using namespace std; typedef long long ll; typedef unsigned long long ull..

1063번: 킹

2022.02.05 문제 출처: https://www.acmicpc.net/problem/1063 문제 분석: 킹과 돌맹이를 주어진 방향에 따라 움직이는 문제이다. 킹이 움직이는 방향에 돌맹이가 있으면 같이 밀린다. 필요한 요구사항에 따라 구현 하면 될듯 하다. 문제 해결: 처음에 주어진 좌표를 숫자좌표로 바꾸고 킹이 움직이는 방향을 돌맹이와의 상대좌표와 비교해서 같이 움직이는지 안움직이는지를 확인한다. 그리고 체스판 제한을 확인하며 움직여 준다. 내 소스코드: using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair pii; typedef vector vi; c..

10164번: 격자상의 경로

2022.02.03 문제 출처: https://www.acmicpc.net/problem/10164 문제 분석: o 표시가 되있는 칸이 있으면 o 표시를 꼭 지나야 할때 N, M 칸에 도달 하는 경우의 수를 구하여라. 로봇이 오른쪽, 아래만 갈 수 있기 때문에 중,고등학교 때 보던 최단거리 문제와 푸는 방법이 같을것 같다. arr[i][j] = arr[i-1][j] + arr[i][j-1] 다음과 같은 점화식을 따른다. 문제 해결: 다른부분은 점화식 그대로 코드를 짜면되지만 K, o를 치는 부분을 x, y좌표로 나타내야된다. Y좌표는 K / M X좌표는 K - K/M*M - 1 로 나타냈다. 하지만 위와 같은 방법은 K를 M으로 나눴을때 나머지가 0일때는 다른값이 나와 예외처리를 해준다. Y = K / ..

2539번: 모자이크

2022.01.23 문제 출처: https://www.acmicpc.net/problem/2539 문제 분석: 잘못 칠해진 칸들의 좌표들을 정해줬을 때 이를 덮을 수 있는 정사각형 색종이의 가장 작은 크기를 구하는것. 사용할 정사각형의 색종이의 개수는 정해져 있다. 문제 해결: 문제에서 주어지는 예시 처럼 3cm 정사각형 색종이 4개로 덮을 수 있다. 그렇다면 4cm 정사각형 색종이 4개로도 덮을 수 있다. 즉, 답보다 큰 색종이들로는 모두 조건을 만족 하고, 정답보다 작은 크기의 색종이를 걸러내는 이분탐색을 사용하면 답에 한없이 가까워 질 수 있는 것이다. 이 때, 걸러내는 부분에서는 첫 잘못 칠해진 칸 기준으로 색종이를 점점 늘려갔을때 제한된 색종이 개수보다 많이 들면 false를 return 하는 ..

2437번: 저울

2022.01.23 문제 출처: https://www.acmicpc.net/problem/2437 문제 분석: 입력받은 무게의 추들로 만들 수 없는 최소 양의정수 구하기 문제 해결: "N의 무게를 만들 수 있을때 N + arr[i] 이하는 모두 만들 수 있다." N의 무게를 만들 수 있다 : 0~N까지 추로 만들 수 있다. arr[i] ~ arr[i] + N 이 가능하다 이기때문에 위의 식이 성립한다. 즉, N >= a[i] 일때 N + arr[i] 까지 모두 만들 수 있다. 내 소스코드: using namespace std; const int INF = 987654321; int main() { int N; int arr[1002]; scanf("%d", &N); for (int i = 0; i < N..

8958번: 0X퀴즈

2018.12.31. 문제 출처:https://www.acmicpc.net/problem/8958 문제 분석:처음에 입력받을 수를 정하고 0X결과를 받아와서 연속되는 0개수 만큼 점수가 된다ex) 000 => 1+2+3 = 6 문제 해결:num을 입력받아 그 만큼 내용을 반복 gets() 함수를 통해 문자열을 배열에 입력받는다.배열을 0으로 초기화하고0이 나오기 전까지 즉 입력받은 0X결과가 끝날때까지 for문을 실행한다. 0일때는 이전 배열이 0인지 X인지 확인하여0이면 연속되는 값을 추가하고 X일때는 1로 초기화한다 X일때는 추가되는 점수를 0으로 초기화한다. 내 소스코드:123456789101112131415161718192021222324252627282930313233343536373839404..

2577번: 숫자의 개수

2018.12.29. 문제 출처:https://www.acmicpc.net/problem/2577 문제 분석:세자리수 정수 3개를 입력받고 다 곱한 값이 0-9까지가 각각 몇번 있는지 출력하라 문제 해결:세자리수 정수의 3개의 곱이 몇자리 수인지 알아보고 그 횟수만큼 for문을 돌려 각 자리를 10씩 나눠줘서 해당하는 배열의 크기를 1씩 늘려준다. 내 소스코드:12345678910111213141516171819202122232425262728293031323334#define _CRT_SECURE_NO_WARNINGS #include int main(){ int A, B, C, Result; int arr[10] = {0,};//0-9까지 몇번 출력됬는지 int ans;//각 자리수를 임시저장 int ..

2444번: 별 찍기 - 7

2018.12.24. 문제 출처:https://www.acmicpc.net/problem/2444 문제 분석:2442번과 2443번을 합친형태 문제 해결:https://b1ackhand.tistory.com/6?category=848677https://b1ackhand.tistory.com/7?category=848677 위 참고 내 소스코드:12345678910111213141516171819202122232425262728293031323334353637383940414243#define _CRT_SECURE_NO_WARNINGS #include int main(){ int num; scanf("%d", &num); for (int i = 0;i 1;j--) { printf(" "); } for (i..

2443번: 별 찍기 - 6

2018.12.24. 문제 출처:https://www.acmicpc.net/problem/2443 문제 분석:2442번 문제 와 비슷하지만 역삼격형 형태로 출력하는것https://b1ackhand.tistory.com/6?category=848677 문제 해결:2442번과 비슷하지만 2442는 작은것부터 큰것으로 가는 for문이라면반대로 2443번은 큰것에서부터 작은것으로 가는 for문사용 내 소스코드:1234567891011121314151617181920212223242526272829#define _CRT_SECURE_NO_WARNINGS #include int main(){ int num; scanf("%d", &num); for (int i = num;i > 0;i--) { for (int j ..