본문 바로가기

백준28

[BOJ] 2504번 - 괄호의 값 괄호로 이루어진 문자열을 수식으로 나타내어 값을 출력하는 문제이다. 닫는 괄호는 해당 여는 괄호가 바로 앞에 나왔을 때만 값이 적용된다는 점을 유의해야 한다 - 예외처리 안해서 처음에 틀렸다 여는 괄호가 나왔을 때 1) '(' : 스택에 push하고 tmp 변수에 곱하기 2 2) '[' : 스택에 push하고 tmp 변수에 곱하기 3 닫는 괄호가 나왔을 때 1) 스택이 비어있는 지 확인 : 비어있으면 잘못된 문자열 : 0 출력 2) 스택의 탑이 해당 여는 괄호인지 확인 : 이전 문자열이 해당 여는 괄호인지 확인 : tmp값을 ans에 더해준다 : 스택에서 해당 여는 괄호 pop : tmp값 2 or 3으로 나눈다. 3) 그 외의 경우(해당 여는 괄호가 아닌 경우) : 잘못된 문자열 : 0 출력 마지막으로.. 2022. 6. 27.
[BOJ] 1205번 - 등수 구하기 점수 리스트 내에 입력값의 순위가 몇위인지 출력하는 문제이다. case를 나눠보면 1) 점수 리스트 크기보다 순위가 낮아서 랭크인 하지 못하는 경우 -1 출력 2) 동점자가 많아서 랭크인 하지 못하는 경우 -1 출력 3) 그외에는 입력값의 순위 정상 출력 다음과 같이 경우를 나누어 구현하면 된다. #include #include #include #include #include using namespace std; int N, score, P; int score_rank = 1, score_p = 1; int num[50]; int main() { cin >> N >> score >> P; for (int i = 0; i > num[i]; if (num[i] > score) .. 2022. 6. 23.
[BOJ] 1159번 - 농구 경기 문자열을 입력받아 가장 앞글자의 빈도수를 계산하는 문제이다. 카운팅 배열을 사용하여 각 알파벳에서 'a'를 빼주어 인덱스마다 알파벳을 카운팅해준다. #include #include #include using namespace std; string name, ans; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; char c; int count[26] = { 0, }; cin >> N; for (int i = 0; i > name; count[name[0] - 'a']++; } for (int i = 0; i = 5) ans +.. 2022. 6. 17.
[BOJ] 10988번 - 팰린드롬인지 확인하기 주어진 문자열이 팰린드롬인지 확인하는 문제이다. 팰린드롬은 앞으로 읽을 때와 거꾸로 읽을 때 같은 단어를 말한다. C++ STL의 reverse함수를 사용하여 비교한다. #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); string s, tmp; cin >> s; tmp = s; reverse(tmp.begin(), tmp.end()); if (tmp == s) cout 2022. 6. 17.
[BOJ] 2979번 - 트럭 주차 시간별 차량의 수에 따라 달라지는 주차요금을 계산하는 문제이다. 차량이 주차된 시간만큼 카운팅 배열의 인덱스 값에 더해주고 경우에 따라 달라지는 요금을 곱하여 총 합을 구한다. #include using namespace std; int A, B, C, s, f, ans; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int count[101] = { 0, }; cin >> A >> B >> C; for (int i = 0; i > s >> f; for (int j = s; j < f; j++) count[j]++; } for (int i = 1; i < 100; i++) { if .. 2022. 6. 17.
[BOJ] 10808번 - 알파벳 개수 단어내의 알파벳 갯수를 카운팅하는 문제이다. 카운팅 배열을 사용하여 각 알파벳에서 'a'를 빼주어 인덱스마다 알파벳을 카운팅 해준다. #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int count[26] = { 0, }; string str; cin >> str; for (char a : str) // 문자열 내 문자마다 for문 실행 count[a - 'a']++; for (int i = 0; i < 26; i++) cout 2022. 6. 17.
[BOJ] 2309번 - 일곱 난쟁이 9명중 7명 키의 합이 100이 되는 경우를 오름차순으로 출력하는 문제이다. next_permutation을 통해 height 배열내의 순서를 바꿔가며 합이 100인 경우를 출력한다. #include #include using namespace std; int height[9]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); for (int i = 0; i > height[i]; } sort(height, height+9); do { int sum = 0; for (int i = 0;i < 7; i++) sum += height[i]; if (sum == 100) break; } w.. 2022. 6. 17.
[BOJ] 1041번 - 주사위 밑면을 제외한 나머지 5면의 숫자들의 합을 최솟값으로 출력하는 문제이다. 이 문제를 쉽게 해결하기 위해선 주사위마다 몇개의 면이 보이는지를 분류해야 하는데 위 그림을 보는 것처럼 5면은 1개의 윗면과 4개의 옆면으로 이루어져 있다. 빨간색 : 3면이 보이는 주사위 파란색 : 2면이 보이는 주사위 초록색 : 1면이 보이는 주사위 이를 수식화하여 표현하면 한변의 길이가 N인 정육면체의 주사위인 경우 다음과 같이 나타낼 수있다. 3면이 보이는 주사위 : 4 2면이 보이는 주사위 : 4*(N-1) + 4*(N-2) 1면이 보이는 주사위 : 4*(N-1)*(N-2) + (N-2)*(N-2) 그리고 이 세개의 면에 보이는 숫자들은 6개의 주사위의 숫자중에 마주보는 숫자끼리 중 작은것들로 채우면 된다. #includ.. 2022. 6. 16.
[BOJ] 16953번 - A → B 문제에서는 A를 B로 바꾼다고 했지만 B에서 A로 바꾸는게 코드 짜기 훨씬 편하다. 조건을 나눠본다면 먼저 짝수냐 홀수이냐를 크게 구분할 수 있는데 여기서 문제 조건인 1을 수의 가장 오른쪽에 추가한다는 내용 때문에 1. 가장 먼저 if문에 1의자리가 1인지 확인한다. 10으로 나누고 count ++, 반복문 진행 2. 다음으로 홀수인지 확인 조건에 있는 연산으로는 1을 제외한 홀수의 숫자가 나올 수 없기 때문에 -1 출력하고 종료 3. 그 외의 나머지 경우 2로 나누고 count ++, 반복문 진행 4. while문 내의 조건을 만족하고 빠져나온 경우 주어진 조건인 2를 곱하거나 1을 수의 가장 오른쪽에 추가하는 것으로 숫자를 변환 할수 없으므로 -1 출력하고 종료 #include using names.. 2022. 6. 16.