일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- ecr.api
- endpoint
- 4575
- Metric
- 백준
- 도커
- 블로그 소개 #공지
- imds
- cloud-config
- 숙련기술원
- dataroot
- ssh
- VPC
- ENI
- 11531
- node exporter
- 알고리즘
- EC2
- keypair
- kubernetes #k8s #기본 #명령어
- docker #dockerfile #도커 #도커파일
- googleauthenticator
- prometheus
- ecr.dkr
- 후기
- kubernetes #k8s #구성요소 #작동원리 #핵심요소
- docker #도커 #기본명령어
- docker
- AWS
- 합격전략
- Today
- Total
ISFJ 개발자의 이야기
백준 Refrigerator Magnets - 4575 본문
오늘은 백준 4575문제를 풀어봤습니다.
문제
결과적으로 반복된 문자가 없는 문장만 출력하는 문제입니다.
아래의 사진과 같이 문자가 중복이 있는 문장은 출력하지 않고 중복이 없는 문장만 출력하게 코드를 짜면 됩니다.
풀이
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string content;
while (true) {
getline(cin, content);
if (content == "END") {
break;
}
vector<int> alphabet_count(26, 0);
bool possible = true;
for (char c : content) {
if (c == ' ') {
continue;
}
int index = c - 'A';
alphabet_count[index] += 1;
if (alphabet_count[index] > 1) {
possible = false;
break;
}
}
if (possible) {
cout << content << endl;
}
}
}
C++을 사용해서 풀었으며, 위의 나온 예시를 바탕으로 코드를 구성하면 됩니다.
종료조건은 입력된 값이 "END"이면 종료 이므로 If문을 사용해서 구현하였고, 입력된 값이 END가 아닐 경우 반복문을 돌려서 "index = c - 'A';" 코드를 통해 각 알파벳에 맞는 배열 주소를 구하고 "alphabet_count[index] += 1;" 코드를 통해 그 주소값에 +1을 하도록 구현하였습니다.
그리고 제일 중요한 아래의 코드를 통해 1보다 클 경우 중복된 문자가 있는 경우 이므로 possible 변수를 false로 바꾸어 그 문장은 출력되지 않도록 구현하였습니다. 결과적으로 possible 변수가 true인 경우 중복된 문자가 없는 경우 이므로 그 문장은 출력되도록 구현하였습니다.
if (alphabet_count[index] > 1) {
possible = false;
break;
}
arr[c - 'A'] 에 대해서
c는 영문자를 저장하는 변수 입니다.
c - 'A'는 해당 문자를 0부터 시작하는 인덱스로 변환합니다.
예시)
만약 c = 'A'라면
c - 'A' = 'A' - 'A' = 0이 됩니다. 따라서 arr[0]을 참조합니다.
만약 c = 'B'라면
c - 'A' = 'B' - 'A' = 1이 됩니다. 따라서 arr[1]을 참조합니다.
만약 c = 'Z'라면
c - 'A' = 'Z' - 'A' = 25가 됩니다. 따라서 arr[25]를 참조합니다.
'알고리즘' 카테고리의 다른 글
백준 ACM 대회 채점 - 11531 (0) | 2025.06.13 |
---|