본문 바로가기

Programming/Algorithm

2105. [모의 SW 역량테스트] 디저트 카페 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu& SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com FIFO를 위한 Queue 의 응용 문제정도로 보인다. 입력에 대한 처리의 수월하게 해 줄 자료구조를 우선적으로 떠올려 보는 습관을 가져야겠다. #include #incluse using namespace std; int N, cnt=-1; int map[21][21]; int visit[21][21]; int dx[] = { 1,1,-1,-1 }; int dy[] = { 1,-1,-1,1 }; .. 더보기
[C++] 백준 11047번 : 동전 0 종종 변수 선언을 적게 하기 위해 사용하지 않는 배열의 한 부분에 count 나 maximum 값을 넣어뒀었는데, 속도 차이가 꽤 난다는 것을 알게 되었다(이 단순한 문제에서도 두배 이상 차이가 났다). 문제 자체는 쉽지만 배운점이 있어 글을 남김. #include using namespace std; int main(){ int N, K; cin >> N >> K; int money[11] = { 0 }; int cnt = 0; for (int i = 0; i > money[i]; for (int i = N - 1; i >= 0; i--) while (K >= money[i]) { K -= money[i]; cnt++; } cout 더보기
<코드업> 4713 : 공주님의 정원 필요한 함수들은 금방 떠올랐지만 날짜를 정확하게 맞추는데 꽤나 고생한 문제이다. 처음 문제를 읽으면서 들었던 생각은 각 월의 마지막날 다음날을 어떻게 다음 월의 첫째 날로 생각할 수 있는지에 대한 것이었다. 예를 들어, 1월 31일의 다음날이 2월 1일이고, 2월 28일의 다음날은 3월 1일이라는 것을 어떻게 표현할지에 대한 것이었다. 단순히 31을 기준으로 잡기엔 월마다 마지막 날이 다른것이 문제였다. 해결책으로 매월, 일, 시는 사실 연속적으로 이어지는 단위를 우리가 이해하기 위한 단위로 끊어놓은 것이므로, 월 / 일을 연속된 단위로 바꾸기 위해 flatten 함수를 만들어 해달 월 / 일을 1년의 몇번째 날인지를 반환하도록 하였다. 날짜를 계산하는 과정에서 하루씩 count 하면 무의미한 연산이 많.. 더보기
<코드업> 4040 : 펜션 #include #include using namespace std; int cntRoom(string [], int, int); //머물 수 있는 기간 반환 int maxRoom(string [], int, int); //머물 수 있는 날이 가장 긴 방의 인덱스를 반환 int main() { int n, m, s, t; string room[102]; cin >> n >> m; for (int i = 1; i > room[i]; cin >> s >> t; s; t; int stayRoomI = maxRoom(room, s, m); int cnt = 0; for (; s < t; s++){ if (stayRoomI == (m + 1)) { cnt = -1; break; } else if (cntRoom(.. 더보기
<코드업> 3321 : 최고의 피자 #include int getMax(int [], int); //배열중 최대값의 인덱스를 반환 int main(){ int kot[101]; //토핑의 종류 100가지, 101번째는 도우의 칼로리 int a, b, n; scanf("%d %d %d %d", &n, &a, &b, &kot[101]); for(int i=0; i 더보기
<코드업> 3301 : 거스름돈 #include int main() { int money, cnt = 0; scanf_s("%d", &money); while (money >= 50000) { money -= 50000; cnt++; } while (money >= 10000) { money -= 10000; cnt++; } while (money >= 5000) { money -= 5000; cnt++; } while (money >= 1000) { money -= 1000; cnt++; } while (money >= 500) { money -= 500; cnt++; } while (money >= 100) { money -= 100; cnt++; } while (money >= 50) { money -= 50; cnt++; } w.. 더보기
<코드업> 2001 : 최소 대금 #include int getMin(int[], int); //n개의 배열중 최소값을 반환 int main() { int a[3], b[2]; for (int i = 0; i < 3; i++) scanf("%d", &a[i]); for (int i = 0; i < 2; i++) scanf("%d", &b[i]); int pasta = getMin(a, 3); int juice = getMin(b, 2); printf("%.1lf", (pasta + juice) * 1.1); } int getMin(int a[], int n) {//n개의 배열중 최소값을 반환 int min = a[0]; for (int i = 1; i < n; i++) if (a[i] < min) min = a[i]; return min.. 더보기
[C++] 백준 11399번 : ATM #include #include int getMin(int[], int); //n개의 배열중 최소값을 반환 void swap(int&, int&); //두개의 정수값을 스왑 int main() { int A[1000] = {}; int n; scanf("%d", &n); for (int i = 0; i = 0; i--) { sum += getMin(A, i); sumHour += sum; } printf("%d", sumHour); } int getMin(int a[], int n) { int min = 0; for (int .. 더보기