문제 4065 · 바이트 V
수신 대상 표기 점검
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
사내 메신저의 운영 담당자는 알림을 받을 대상을 적은 문자열을 점검하고 있다. 이 문자열은 실제 메시지 본문과 별도로 저장되는 수신 대상 필드다. 여러 부서에서 서로 다른 방식으로 자료를 옮긴 탓에, 사람의 눈에는 비슷해 보여도 사내 표기 규칙을 어기는 값이 섞여 있다. 담당자는 문자열을 고치거나 사용자를 찾아보지 않고, 주어진 값 자체가 규칙을 만족하는지만 판단하려 한다. 올바른 수신 대상 표기는 반드시 @로 시작한다. 첫 번째 문자인 @를 제외한 나머지 부분을 아이디라고 한다. 아이디의 길이는 3 이상 12 이하이며, 아이디에는 영문 소문자, 숫자, 밑줄(_)만 사용할 수 있다. 아이디의 첫 문자는 반드시 영문 소문자여야 하고, 마지막 문자는 영문 소문자 또는 숫자여야 한다. 또한 아이디 안에서 밑줄 두 개가 바로 이어서 나타나면 안 된다. 이 조건들은 모두 동시에 만족해야 한다. 예를 들어 아이디 중간에 숫자가 여러 번 이어지는 것은 허용된다. 밑줄도 다른 문자를 사이에 두고 여러 번 등장할 수 있다. 그러나 대문자를 소문자로 바꾸거나 앞뒤의 문자를 지운 뒤 검사해서는 안 된다. @가 아이디 안에 다시 등장하는 경우도 허용되지 않는다. 문자열에 있는 모든 문자를 그대로 검사해야 하며, 일부 구간만 규칙을 만족하는 것은 충분하지 않다. 입력에는 점검할 문자열 N개가 저장된 순서대로 주어진다. 같은 문자열이 여러 번 나와도 각각 별개의 기록으로 센다. 정규식 패턴을 사용하는 대신 각 문자의 종류와 인접한 문자를 차례로 확인하여, 올바른 문자열의 개수와 규칙을 어긴 첫 번째 기록의 번호를 구한다. 기록 번호는 1부터 시작하며, 모든 기록이 올바르면 첫 번째 잘못된 기록의 번호는 0으로 나타낸다.
입력
첫째 줄에 문자열의 개수 N이 주어진다. N은 1 이상 10,000 이하의 정수다. 다음 N개 줄에 점검할 문자열이 하나씩 주어진다. 각 문자열의 길이는 1 이상 30 이하이며, 영문 대문자, 영문 소문자, 숫자, @, 밑줄(_)로만 이루어진다. 공백과 빈 문자열은 주어지지 않는다.
출력
올바른 문자열의 개수와 규칙을 어긴 첫 번째 기록의 번호를 공백으로 구분하여 한 줄에 출력한다. 잘못된 기록이 없으면 두 번째 값으로 0을 출력한다.
예제 입력 1
6 @min_7 @ab @c__de @room42 @Ari @sun
예제 출력 1
3 2
예제 입력 2
3 @abc @a_b9 @z00
예제 출력 2
3 0
예제 입력 3
2 @ abc
예제 출력 3
0 1
힌트 펼치기
- @ 뒤의 아이디 길이를 먼저 확인한다.
- 아이디를 순회하면서 허용된 문자와 연속한 밑줄을 확인한다.
알고리즘 분류
문자열구현풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |