
https://www.acmicpc.net/problem/17219
문제 요약
사이트 주소와 비밀번호가 주어지고,
나중에 특정 사이트의 주소를 입력받으면
해당 사이트의 비밀번호를 출력하는 문제다.
입력 형식은 다음과 같다:
첫 줄에 저장할 사이트 수 N과 찾을 사이트 수 M이 공백으로 구분되어 주어진다.
이어지는 N줄에는 주소 비밀번호 형식으로 저장할 정보가 들어온다.
마지막 M줄에는 비밀번호를 찾으려는 사이트 주소가 주어진다.
내가 헷갈렸던 점
처음에는 16개의 주소 + 비밀번호가 주어지면,
그중에서 4개를 건너뛰거나 특정 규칙에 따라 출력하는 줄로 착각했다.
그래서 정답으로 기대한 출력값이 실제 문제의 요구와 달라져 혼란이 왔다.
하지만 문제를 다시 읽어보니,
16개는 전부 단순 저장용이고
그 후 4개는 조회용 주소라는 걸 뒤늦게 정확히 이해했다.
풀이 방법
Dictionary(Dictionary<string, string>)를 활용하여 사이트 주소를 key로, 비밀번호를 value로 저장한다.
이후 찾으려는 주소가 주어졌을 때 dict[주소]로 비밀번호를 바로 출력한다.
작성한 코드
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace backjoon
{
internal class Program
{
static void Main()
{
string[] input = Console.ReadLine().Split();
int n = int.Parse(input[0]); // 저장할 주소 수
int m = int.Parse(input[1]); // 찾을 주소 수
Dictionary<string, string> map = new Dictionary<string, string>();
// N개의 주소-비밀번호 입력
for (int i = 0; i < n; i++)
{
string[] namePassword = Console.ReadLine().Split();
map[namePassword[0]] = namePassword[1];
}
// M개의 검색 주소에 대해 비밀번호 출력
for (int i = 0; i < m; i++)
{
string site = Console.ReadLine();
Console.WriteLine(map[site]);
}
}
}
}
배운 점
문제에서 주어진 입력 구조를 정확히 이해하는 것이 정말 중요하다.
Dictionary는 이런 "검색형 문제"에서 굉장히 유용하게 쓰인다.