| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- ec2 nginx websocket reverse proxy
- CustomException
- 소셜 로그인
- 도메인 주도 개발
- fastapi
- 패러다임 불일치
- AWS
- session
- @Valid
- springboot
- jwt
- 개발 프로젝트
- Flask
- oauth2.0
- wss 연결 실패
- 구글 로그인
- 백준 10815 # 백준 Java
- 관점 지향 프로그래밍
- validation
- GoormIDE
- logout
- S3
- 이미지 업로드
- 예외 처리
- spring boot
- 자바 orm
- presigned url
- 스프링부트
- spring websocket nginx 설정
- OpenAI API
Archives
- Today
- Total
개발세발은 안되요
[C++] 백준 16139 : 인가-컴퓨터 상호작용 본문
문제
https://www.acmicpc.net/problem/16139
풀이
각 알파벳별 구간당 누적합을 미리 계산해놓고, 각 질문에 따른 해당 알파벳의 등장 횟수를 출력한다.
- 누적합 구하기
alpha[s[i]-'a'][i]++; // i번째 문자의 등장 횟수를 증가
- 질문에 따른 답 출력
alpha[c-'a'][r] - alpha[c-'a'][l-1]; // ㅣ번째부터 r 번째까지 문자 c 가 등장한 횟수
** 이때 l=0 인 경우, 예외처리 필요.
코드
#include <iostream>
#include <string>
using namespace std;
string s;
int q;
int alpha[28][200001];
int ans[200001];
int main()
{
cin >> s;
// 각 알파벳의 구간별 누적합 구하기
alpha[s[0]-'a'][0]++;
for(int i=1; i<s.size(); i++){
for(int j=0; j<27; j++){
alpha[j][i] = alpha[j][i-1];
}
alpha[s[i]-'a'][i]++;
}
// 각 질문에 따른 결과 출력
cin >> q;
for(int i=0; i<q; i++){
char c;
int l, r;
cin >> c >> l >> r;
if(l == 0 ) ans[i] = alpha[c-'a'][r];
else ans[i] = alpha[c-'a'][r] - alpha[c-'a'][l-1];
}
for(int i=0; i< q; i++) cout << ans[i] << "\n";
return 0;
}'알고리즘 > 백준' 카테고리의 다른 글
| [C++] 백준 2638 : 치즈 (0) | 2025.09.05 |
|---|---|
| [C++] 백준 2512 : 예산 (0) | 2025.08.19 |
| [C++] 백준 2805 : 나무 자르기 (1) | 2025.08.18 |
| [C++] 백준 14502 : 연구소 (1) | 2025.08.17 |
| [C++] 백준 1806 : 부분합 (3) | 2025.08.15 |