본문 바로가기

BOJ29

[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] 1940번 - 주몽 입력값들 중 두개를 골라 합이 M이 되는 경우를 카운팅하는 문제이다. 이중 for문으로 전체의 경우를 따져보면 된다. #include #include #include #include using namespace std; int N, M; int input[15001]; int main() { int count = 0; cin >> N >> M; for (int i = 0; i > input[i]; } sort(input, input + N); for (int i = 0; i < N - 1; i++) { for (int j = i + 1; j < N;j++) { if (input[i] + input[j] == M) { count++; break; } else continue;.. 2022. 6. 21.
[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.