많이 비어있던 잔디가 코딩테스트를 시작한 이후로 채워지고 있다.
평일 3문제, 주말 1문제 씩 최대한 진행하려고 노력 중이다.
코딩테스트
[level 1] 시저 암호 - 12926 풀이코드
더보기
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string solution(string s, int n) {
// 아스키코드 z -> a 25차이
int a = 0;
for(int i = 0; i < s.length(); i++) {
// 공백무시
if (s[i] == ' ') {
continue;
}
// 대문자
if (s[i] <= 90) {
a = s[i] + n;
if (a > 90) {
a -= 26;
}
}
// 소문자
else if (s[i] <= 122) {
a = s[i] + n;
if (a > 122) {
a -= 26;
}
}
s[i] = a;
}
return s;
}
[level 1] 숫자 문자열과 영단어 - 81301 풀이코드
더보기
#include <string>
#include <vector>
#include <map>
using namespace std;
map<string, string> sMap; // key: 영문 숫자, value: 숫자(문자열)
int solution(string s) {
int answer = 0;
int i = 0;
sMap["zero"] = "0";
sMap["one"] = "1";
sMap["two"] = "2";
sMap["three"] = "3";
sMap["four"] = "4";
sMap["five"] = "5";
sMap["six"] = "6";
sMap["seven"] = "7";
sMap["eight"] = "8";
sMap["nine"] = "9";
string result = "";
while (i < s.length()) {
// 아스키코드로 소문자 여부 확인 (a = 97, z = 122)
if (s[i] >= 97 && s[i] <= 122) {
// 3글자 확인 -> 4글자 확인 -> 5글자 확인
for (int j = 3; j <= 5; j++) {
if (sMap.count(s.substr(i, j)) == 1) {
// 찾으면 sMap의 Value 값을 결과 문자열에 연결
result += sMap[s.substr(i, j)];
i += j;
}
}
}
// 소문자가 아닌 숫자의 경우 결과 문자열에 연결
else {
result += s[i];
i++;
}
}
// 결과 문자열을 Int형으로 형변환
answer = stoi(result);
return answer;
}
[level 1] 문자열 내 마음대로 정렬하기 - 12915
[level 1] 문자열 내 마음대로 정렬하기 - 12915 풀이코드
더보기
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
// pair<string, string>에서 key값이 같으면 value값으로 정렬
bool compare(const pair<string, string>& a, const pair<string, string>& b) {
if (a.first == b.first) return a.second < b.second;
return a.first < b.first;
}
// 기본적으로 중복 key허용, key로 정렬해주는 multimap 선언
multimap<string, string> sMap;
string key = "";
string value = "";
vector<string> solution(vector<string> strings, int n) {
vector<string> answer;
for (int i = 0; i < strings.size(); i++) {
key = (strings[i])[n]; // example) bed[1] = "e"
value = strings[i]; // example) "bed"
sMap.insert(pair<string, string>(key, value));
}
// key로 정렬된 sMap을 vector로 선언
vector<pair<string, string>> vec(sMap.begin(), sMap.end());
// value로 정렬
sort(vec.begin(), vec.end(), compare);
// 순회하면서 value값을 answer에 추가
for (auto it : vec) {
answer.push_back(it.second);
}
return answer;
}
과제 진행
https://github.com/SONSAZANG/20240106_Exam5
C스타일 형식 지정자(FString::Printf와 유사)
이 방식은 C/C++의 printf와 유사하며, 문자열에서 데이터를 삽입하는 데 사용됩니다.
1. 문자열 형식 지정자
형식 지정자 | 설명 | 예제 |
%s | C 스타일 문자열 (TCHAR*, FString) | FString::Printf(TEXT(”Name: %s”), *PlayerName); |
%ls | 와이드 문자열 (UTF-16) | FString::Printf(TEXT(”Message: %ls”), L “HelloWorld”); |
%hs | 멀티바이트 문자열 (ASCII) | FString::Printf(TEXT(”ASCII String: %hs”), “Hi”); |
2. 정수형 형식 지정자
정수 데이터와 관련된 형식 지정자입니다.
형식 지정자 | 설명 | 예제 |
%d | 10진수 정수 | FString::Printf(TEXT(”Age: %d”), 28); |
%i | 10진수 정수 (C와 통일) | FString::Printf(TEXT(”Value: %i”), 42); |
%u | 부호 없는 10진수 정수 | FString::Printf(TEXT(”Unsigned: %u”), 100); |
%x | 소문자 16진수 | FString::Printf(TEXT(”Hexadecimal: %x”), 255); |
%X | 대문자 16진수 | FString::Printf(TEXT(”Hexadecimal: %X”), 255); |
%o | 8진수 | FString::Printf(TEXT(”Octal: %o”), 10); |
3. 실수형 형식 지정자
소수점 숫자나 과학적 표기법 데이터를 다룰 때 사용하는 형식 지정자입니다.
형식 지정자 | 설명 | 예제 |
%f | 소수점 고정 소수점 표기법(float, double) | FString::Printf(TEXT(”PI: %f”), 3.14159); |
%e | 과학적 표기법(소문자 e) | FString::Printf(TEXT(”Scienfific: %e”), 0,00123); |
%E | 과학적 표기법(소문자 E) | FString::Printf(TEXT(”Scienfific: %e”), 0,00123); |
%g | 소수점 고정 또는 과학적 표기법 중 더 짧은 것 선택 | FString::Printf(TEXT(”General: %g”), 0.00123); |
%G | %g와 동일하나 대문자 사용 | FString::Printf(TEXT(”General: %G”), 12345.678); |
4. 문자 형식 지정자
단일 문자 또는 관련 데이터를 다룰 때 사용하는 형식 지정자입니다.
형식 지정자 | 설명 | 예제 |
%c | 단일 문자 | FString::Printf(TEXT(”Character: %c”), ‘A’); |
%lc | 와이드 문자 | FString::Printf(TEXT(”Wide Char: %lc”), L'あ’); |
5. 포인터 및 기타 형식 지정자
포인터 데이터나 특수 데이터를 표현할 때 사용하는 형식 지정자입니다.
형식 지정자 설명 예재
형식 지정자 | 설명 | 예제 |
%p | 포인터 주소값 출력 | FString::Printf(TEXT(”Pointer: %p”), MyPointer); |
%% | % 문자 출력 | FString::Printf(TEXT(”Progress: %%d%%”)); |
6. 확장된 형식 지정자(언리얼 전용)
언리얼 엔진의 FText, FStrign 등에서 제공하는 확장 형식 지정자입니다.
형식 지정자 설명 예재
형식 지정자 | 설명 | 예제 |
FText::AsNumber | 숫자를 로케일 기반으로 포맷 | FText::AsNumber(123456); // “123,456” |
FText::AsCurrency | 숫자를 통화 형식으로 변환 | FText::AsCurrency(1234.56); // “$1,234.56” |
FText::AsPercent | 숫자를 퍼센트 형식으로 변환 | FText::AsPercent(0.85); // “85%” |
FText::AsDate | 날짜 형식으로 변환 | FText::AsDate(FDateTime::Now()); |
FText::AsTime | 시간 형식으로 변환 | FText::AsTime(FDateTime::Now()); |
정리된 예제 코드
정수, 문자열, 실수 혼합 예제
int PlayerScore = 100;
flaot PlayerAccuracy = 76.5f;
FString PlayerName = TEXT("Player1");
FString Result = FString::Printf(TEXT("Name: %s, Score: %d, Accuracy: %.2f%%"),
*PlayerName, PlayerScore, PlayerAccuracy);
UE_LOG(LogTemp, Log, TEXT("%s"), *Result);
FText 국제화 지원 예제
FText FormattedText = FText::Format(
FText::FromString(TEXT("{0}'s score is {1} and accuracy is {2}%")),
FText::FromString(TEXT("Player1"));
FText::AsNumber(100),
FText::AsPercent(0.765),
);
UE_LOG(LogTemp, Log, TEXT("%s"), *FormattedText.ToString());