
1. 문제 풀이 아이디어
- 문자열을
for
문으로 순회하며 첫 번째로 일치하는 문자만 변환해 문제를 해결할 수 있다.
2. 나의 정답 코드
using System.Text;
StringBuilder sb = new StringBuilder("");
using (StreamReader sr = new StreamReader(Console.OpenStandardInput()))
using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput()))
{
int n = int.Parse(sr.ReadLine());
while (n-- > 0)
{
string[] lhsrhs = sr.ReadLine().Trim().Split();
string[] split = sr.ReadLine().Trim().Split();
for (int i = 0; i < split.Length; i++)
{
for (int j = 0; j < lhsrhs.Length; j += 2)
{
for (int k = 0; k < split[i].Length; k++)
{
if (split[i][k] == lhsrhs[j][0])
{
split[i] = split[i].Substring(0, k) + lhsrhs[j + 1] + split[i].Substring(k + 1);
break;
}
}
}
}
sb.AppendLine("Transformed strings: " + String.Join(" ", split));
}
sw.Write(sb);
}
3. 정리
- 각 단어(
split[i]
)마다 모든 변환 쌍(lhsrhs[j]
)을 확인한다.
- 변환 쌍의 문자 중 해당 단어에 포함된 문자가 있다면, 첫 번째로 일치하는 위치를 찾아 변환 후 문자로 한 번만 치환한다.
Substring(0, k) + 변환문자 + Substring(k + 1)
방식으로 해당 위치의 문자만 대체한다.
- 모든 변환이 끝난 후 결과를
StringBuilder
에 저장하고, 최종적으로 한 번에 출력해 문제를 해결한다.
Share article