Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 언리얼엔진5
- NRVO
- RootMotion
- GeeksForGeeks
- DirectX11
- 줄 세우기
- 1563
- C++
- 2294
- directx
- DeferredRendering
- UnrealEngine4
- softeer
- Frustum
- UnrealEngine5
- 오블완
- algorithm
- RVO
- const
- Unreal Engine5
- 프로그래머스
- IFileDialog
- UE5
- 티스토리챌린지
- Programmers
- C
- 팰린드롬 만들기
- 백준
- baekjoon
- winapi
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 방금그곡 본문
https://school.programmers.co.kr/learn/courses/30/lessons/17683
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
struct Node
{
string name;
int playTime;
int index;
};
bool cmp(const Node& a, const Node& b)
{
if (a.playTime == b.playTime)
{
return a.index < b.index;
}
return a.playTime > b.playTime;
}
string solution(string m, vector<string> musicinfos) {
vector<Node> answer;
for (int i = 0; i < musicinfos.size(); i++)
{
istringstream ss(musicinfos[i]);
string subs1;
vector<string> v;
while (getline(ss, subs1, ','))
{
v.push_back(subs1);
}
int startTime = ((v[0][0]-'0') * 10 * 60) + ((v[0][1] - '0') * 60) + ((v[0][3] - '0') * 10) + ((v[0][4] - '0'));
int endTime = ((v[1][0] - '0') * 10 * 60) + ((v[1][1] - '0') * 60) + ((v[1][3] - '0') * 10) + ((v[1][4] - '0'));
int playTime = endTime - startTime;
for (int i = 0; i < v[3].size(); i++)
{
if (v[3][i] == '#')
{
v[3][i - 1] = tolower(v[3][i - 1]);
v[3].erase(i, 1);
}
}
for (int i = 0; i < m.size(); i++)
{
if (m[i] == '#')
{
m[i - 1] = tolower(m[i - 1]);
m.erase(i, 1);
}
}
int musicLength = v[3].size();
int quotient = playTime / musicLength;
int remainder = playTime % musicLength;
string sum = "";
for (int i = 0; i < quotient; i++)
{
sum += v[3];
}
for (int j = 0; j < remainder; j++)
{
sum += v[3][j];
}
int index = 0;
bool breakCheck = false;
if (sum.size() < m.size()) continue;
while (index <= sum.size() - m.size())
{
if (sum[index] == m[0])
{
bool isCheck = true;
for (int i = 0; i < m.size(); i++)
{
if (m[i] != sum[index])
{
isCheck = false;
break;
}
index++;
}
if (isCheck) // 조건에 부합하면
{
Node temp;
temp.index = i;
temp.playTime = playTime;
temp.name = v[2];
breakCheck = true;
answer.push_back(temp);
}
}
else
{
index++;
}
if (breakCheck)
{
breakCheck = false;
break;
}
}
}
sort(answer.begin(), answer.end(), cmp);
if (answer.size() == 0) return "(None)";
return answer[0].name;
}
|
cs |
문자열관련 구현문제다.
순서에맞게 차근차근 구현하면 크게 어렵지 않은 문제다.
특히 주어진문자열덩어리에서 특정문자열과 일치하는 부분이 있는지 체크하는것만 잘 구현하면 된다. index계산하는게 조금 헷갈리긴 했다. 풀고나니 풀어보길 잘한 문제..? 문자열쪽 구현문제는 단골문제라서 감을 잃지않게 이런문제 한번씩 풀어주는게 좋은 것 같다.
한가지 주의할 점이라면, #이붙은 문자 (A#,D# 등등) 을 다른문자로 치환해줘야 한다는 것. 처음에 #붙은걸 고려안하고 그냥했다 조금 헤맸다. 위 코드같은 경우, 문자열 중간에 #이 발견되면 바로 이전 문자를 소문자로 바꿔주고 #부분을 erase했다. #은 반드시 0을 넘은 인덱스위치에서만 발견되기 때문에 따로 인덱스 예외처리는 안해줘도 된다.
그러면 A#BDE -> aBDE 로 변하고, 이걸로 로직을 진행하면 된다.
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 전력망을 둘로 나누기 (0) | 2022.08.29 |
---|---|
[Algorithm] Programmers :: 삼각 달팽이 (0) | 2022.08.29 |
[Algorithm] Programmers :: 튜플 (0) | 2022.08.26 |
[Algorithm] Programmers :: 아이템 줍기 (0) | 2022.08.26 |
[Algorithm] Programmers :: 올바른 괄호 (0) | 2022.08.25 |