Gidhub BE Developer

Midas Online Coding Test

2018-05-12
goodGid

Problem

마이다스챌린지 2018

  • 4시간 / 6문제
문제 1.
아이디/패스워드 (SafeUserInfo)

당신에게 회사 웹사이트의 "회원가입모듈"을 만드는 과제가 주어졌습니다. 아이디와 패스워드를 입력 받고, 아이디와 패스워드가 생성규칙에 부합한다면 "T" 부합하지 않는다면 "F"를 출력하는 프로그램을 작성해 주시기 바랍니다.

아이디 패스워드 생성 규칙은 다음과 같습니다.

아이디는 6-12자 이내의 “알파벳 소문자와 숫자의 조합”만 입력 받을 수 있어야 합니다.
패스워드는 8~16자 이내의 “알파벳 소문자와 숫자의 조합”만을 입력 받을 수 있어야 합니다.
아이디/패스워드에는 숫자와 알파벳 소문자가 한 개 이상씩 포함되어야 합니다. (예, tiger123, monkey2)
패스워드는 연속으로 동일한 3개의 문자 또는 숫자를 포함 할 수 없습니다. (예, abcd111ab, abaaacdef5)
입력

입력은 표준 입력(stdin)으로 주어집니다.
첫 번째 줄에는 아이디, 두 번째 줄에는 패스워드를 입력합니다.

출력

출력은 표준 출력(stdout)으로 이루어집니다.
아이디와 패스워드가 생성규칙에 모두 부합한다면 “T” 부합하지 않는다면 “F”를 출력합니다.

<예1>
입력
tiger1
monkey09

출력
T

<예2>
입력
rabbit
monkey

출력
F

문제 2.
전자메일주소 (AutoMailNaming)

당신에게 회사의 신입사원 명단이 주어질 것 입니다. 모든 신입사원에게는 아래의 규칙에 따라 이메일 주소가 부여되어야 합니다.

각 신입사원의 이름(Full Name)은 영문이며, 두 부분 또는 세 부분으로 구성 됩니다. 각 부분은 이름(First Name), 중간이름(Middle Name, 선택적), 성(Last name)이고, 공백으로 구분됩니다. 단, 성(Last Name)에는 하이픈이 추가로 포함 될 수 있습니다.

회사 이름 또한 영문 이며, 각 이메일 주소는 LastFirst@Company.com 형식을 사용해야 합니다.

First는 이름의 머리 글자입니다.
Last는 성입니다.
Company는 회사 이름입니다.
만들어지는 주소는 소문자이어야 하며 하이픈이 없어야 합니다.

또한 둘 이상의 사람이 동일한 전자 메일 주소를 가질 경우 "@"기호 앞에 후속 정수 (두 번째 주소부터 2를 부여)를 추가하여 주소를 구분합니다.

예) "jd@company.com"인 사람이 세 명인 경우 "jd@company.com", "jd2@company.com" , "jd3@company.com" 주소를 각각 할당해야 합니다.

이메일 주소를 생성하는 프로그램을 작성 해 주시기 바랍니다.

입력

입력은 표준 입력(stdin)으로 주어집니다.
입력의 첫 번째 줄은 회사 이름이고, 회사 이름의 길이(N)은 3<=N<=100 입니다. 
두 번째 줄은 부호 “,“로 구분된 사원의 이름 목록입니다.
입력되는 목록에서 신입사원 수는 3에서 1000명까지 허용됩니다.

출력

출력은 표준 출력(stdout)으로 이루어집니다.
사원 이름 목록과 동일한 순서로 이메일 주소 목록을 출력하여야 합니다.
이메일 주소 사이의 구분자는 쉼표와 공백 한 개입니다.
(예 doej@exmp.com, parkp@ exmp.com)

<예1>
입력
MIDASIT
John Doe, Peter Parker, Mary Jane Watson-Parker, James Doe, John Elvis Doe, Jane Doe, Penny Parker

출력
doej@midasit.com, parkerp@midasit.com, watsonparkerm@midasit.com, doej2@midasit.com, doej3@midasit.com, doej4@midasit.com, parkerp2@midasit.com

<예2>
입력
    MIDASIT
,   John   Doe  ,    Peter Parker,  Mary  Jane      Watson-Parker  ,  James   Doe,  John Elvis Doe,    Jane    Doe ,  Penny Parker  ,

출력
doej@midasit.com, parkerp@midasit.com, watsonparkerm@midasit.com, doej2@midasit.com, doej3@midasit.com, doej4@midasit.com, parkerp2@midasit.com

문제 3.
인류의 마지막 여행 (InterstellarTravel)

환경 파괴로 인하여 지구에서 더 이상 생존할 수 없게 된 인류는, 새로이 정착할 수 있을 것으로 보이는 행성 “Z”를 발견하였습니다.

NASA는 행성 Z가 인류의 정착에 적합한지 탐사하기 위하여 탐사대를 보낼 예정입니다. 탐사대의 임무는 다음과 같습니다.

탐사대는 행성 A에서 출발하여 행성 Z에 도착해야 합니다.
탐사대는 이동 과정에서 추가로 정착 후보 행성 1곳을 방문하여 인류의 정착이 가능한지 리포트를 작성해야 합니다.
탐사대는 행성과 행성을 단방향으로 이어주는 웜홀을 통과하여 행성Z를 향해 출발할 계획입니다.

당신은, 이 과정에서 탐사대가 운항할 최적의 경로를 계산하기 위한 프로그램 개발을 의뢰 받았습니다.

행성 A에서 출발하여 후보 행성 1곳을 거친 후 목적행성 Z를 향해 갈 수 있는 최단 경로를 계산하는 프로그램을 작성해 주시기 바랍니다.
(행성과 행성간의 거리는 1로 동일하며, 후보 행성을 반드시 통과해야만 합니다.)

입력

입력은 표준 입력(stdin)으로 주어집니다.
첫 번째 줄에는 총 이동 가능한 경로(웜홀)의 개수 N이 주어집니다. 두 번째 줄부터 N개의 이동 가능한 경로가 주어집니다. 경로는 콤마로 구분된 두 개의 행성 명으로 나타내며, 행성 명은 알파벳 대문자 한 글자로 표현됩니다. 예를 들어 경로가 “A,B”라고 주어지면 행성 A에서 행성 B로 이동 가능하다는 의미입니다.

마지막 줄에는 정착 후보 행성 명이 주어집니다.

출발지는 A, 최종 종착지는 Z로 표현되며, 총 행성의 수는 3개 이상, 26개 이하입니다.

출력

출력은 표준 출력(stdout)으로 이루어집니다.
최단 경로의 거리를 출력합니다.
정착 후보 행성을 통과할 수 없거나 최종 목적지에 도달하기가 불가능하다면 -1을 출력합니다.

<예>
입력
5
A,B
B,C
C,D
C,Z
D,Z
D

출력
4

문제 4.
활성화 코드 만들기(ActivateCode)

사용자로부터 입력된 시리얼 번호와 웹 인증 서버에서 받은 토큰을 조합하여 활성화 코드를 만들고자 합니다.

다음 그림은 시리얼 번호이며, 첫 번째 입력된 정수의 2진수 변환 결과입니다. (ex. 438)
빨간색으로 표시한 것은 토큰이며, 두 번째 입력된 정수의 2진수 변환 결과입니다. (ex. 13)


활성화 코드는 시리얼 번호에서 토큰을 삭제하는 방식으로 만들어집니다. 토큰은 시리얼 번호에서 0개 이상 나타날 수 있으며, 삭제 순서에 따라서 남은 시리얼 번호가 달라집니다. 이 중에서 가장 작은 자릿수의 시리얼 번호가 활성화 코드입니다.

다음은 활성화 코드를 생성하는 예시입니다. 1)의 방법으로 생성하면 1자리의 활성화 코드가 생성되고 2)의 방법으로 하면 5자리의 활성화 코드가 생성됩니다. 따라서 가장 작은 활성화 코드의 자릿수는 1이 됩니다.


활성화 코드의 자릿수를 출력하는 프로그램을 작성해 주시기 바랍니다.

입력

입력은 표준 입력(stdin)으로 주어집니다.
첫 번째 줄에는 N이 주어집니다. N은 시리얼 넘버입니다. (100 <= N <= 999999999999)
두 번째 줄에는 X가 주어집니다. X는 제거할 인증 토큰입니다. (8 <= X <= 128)

출력

출력은 표준 출력(stdout)으로 이루어집니다.
시리얼 넘버에서 인증 토큰을 모두 제거하고 난 후의 가장 작은 자릿수를 출력합니다.

<예>
입력
438
13

출력
1

문제 5.
삼항 연산자 (TernaryOperator)

C++, Java 등의 프로그래밍 언어 에서는 ‘?’, ‘:’ 키워드를 사용하여 아래와 같은 형식의 삼항 연산자(조건 연산자)를 제공합니다. condition이 true이면 연산자는 expr1의 값을 반환하며, false이면 expr2를 반환합니다.

condition ? expr1 : expr2

삼항 연산자 표현식을 수행했을 때 반환되는 결과값을 출력하는 프로그램을 작성해 주시기 바랍니다.

이번 문제에서 condition은 두 개의 자연수와 하나의 비교연산자로만 이루어져 있으며, expr1과 expr2는 자연수 이거나 또 다른 삼항 연산자 표현식입니다. (중첩 삼항 연산자) 연산자를 표현할 때 괄호 ‘(‘, ‘)’는 사용하지 않습니다. 자연수의 범위는 1<=N<=999 이며, 사용되는 비교연산자 종류는 ==, !=, >, <, >=, <= 입니다. 입력된 표현식은 오류가 아닌 경우 자연수를 반환합니다.

예를 들어, 1!= 2 ? 3 > 4 ? 5 >= 6 ? 7 : 8 == 9 ? 10 : 11 : 12 : 13 의 반환 값은 12 입니다.
풀이 과정은 아래와 같습니다.

     1!= 2 ? 3 > 4 ? 5 >= 6 ? 7 : 8 == 9 ? 10 : 11 : 12 : 13
 1!= 2 ? 3 > 4 ? 5 >= 6 ? 7 : (8 == 9 ? 10 : 11) : 12 : 13
 1!= 2 ? 3 > 4 ? (5 >= 6 ? 7 : 11) : 12 : 13
 1!= 2 ? (3 > 4 ? 11: 12) : 13
 1!= 2 ? 12 : 13
 12

입력

입력은 표준 입력(stdin)으로 주어지며, 첫째 줄에 삼항 연산자 표현식이 주어집니다.
표현식은 문자열로 표현하며 연산자와 피연산자 사이는 공백으로 구분됩니다.
입력 문자열의 최대 길이는 10000 입니다.

출력

출력은 표준 출력(stdout)으로 이루어집니다.
첫째 줄에 삼항 연산자 반환값을 출력합니다.
입력된 삼항 연산자 표현식에 오류가 있어서 반환값을 알 수 없는 경우 -1을 출력합니다.


<예1>
입력
1 > 2 ? 3 : 4 > 5 ? 6 : 7

출력
7

<예2>
입력
33 != 1 ? 13 > 35 ? 4 >= 5 ? 0 : 4 == 2 ? 13 : 4 : 23 : 2

출력
23

문제 6.
가장 큰 영역 찾기(LargerClosedArea)

다음 그림과 같은 그리드 영역 위에는 두 개의 좌표로 구성된 직사각형들이 있습니다. 주어진 직사각형은 기본적으로 1개 이상의 폐구간을 가지고 있습니다. 폐구간의 크기는 외곽 셀을 제외한 셀의 개수입니다. 예제의 그림에서 폐구간은 3개이며, 크기는 5, 4, 10 입니다. 직사각형간의 교차가 발생하면 폐구간이 새로 생기거나, 사라질 수도 있습니다. 주어진 입력에서 가장 큰 폐구간의 크기를 출력하는 프로그램을 작성해 주시기 바랍니다.


입력

입력은 표준 입력(stdin)으로 주어집니다.
첫 번째 줄에는 N이 주어집니다. N은 직사각형의 개수입니다. (2 <= N <= 10)
두 번째 줄에는 N의 개수만큼 두 개의 좌표 쌍이 주어집니다. (X1,Y1,X2,Y2) 좌표 쌍은 모두 콤마(,)로 구분하며, 순서대로 첫 번째 좌표의 X,Y 두 번째 좌표의 X,Y 정수 값입니다. (1 <= X,Y <= 100).

출력

출력은 표준 출력(stdout)으로 이루어집니다.
가장 큰 폐구간의 크기를 출력합니다.

<예>
입력
2
2,3,6,9
4,2,9,8

출력
10

Review

  • 구름IDE에서 치르는건데 1번문제는 소마코테때랑 같은 문제다.

  • 지원하지 못하고 문제만 받아서 정리 !


Index