[BOJ 15956] 숏코딩
View as PDF
Submit solution
Points:
4
Time limit:
4.0s
Memory limit:
512M
Problem types
Allowed languages
Assembly, Awk, C, C++, Java, Pascal, Perl, Python, Sed, Text
코드 페스티벌 온라인 예선에 참가하고 있던 라이언은 이제 남은 시간이 00:00:00밖에 없다는 것을 깨닫게 되었다. 라이언은 이미 머릿속에서 풀이를 구상하고 코딩도 완료했기 때문에, 이를 그대로 타이핑하기만 하면 된다.</p>

지금 라이언은 변수들과 정수들끼리 같은지 다른지 비교하는 간단한 조건문 (conditional expression) S를 작성하고자 한다. 자세히 설명하자면,
- 라이언이 작성하는 변수의 이름은 영문 알파벳으로만 구성된 문자열이다. 예를 들어,
kakao,COde,festival은 변수의 이름이 될 수 있지만,C0de,2018,hello_world는 변수의 이름이 될 수 없다. 변수는 정수 값을 저장하고 있으며, 변수의 값은 해당 변수가 저장하고 있는 정수 값을 의미한다. - 라이언이 작성하는 정수는 무조건 -109 이상 109 이하이다. 0을 제외한 정수는 숫자
0으로 시작하지 않으며, 0을 표기하는 유일한 방법은0이다. 예를 들어, 라이언은0,123456,-987654321과 같은 정수는 작성할 수 있지만,-0,0123,00000,-009876,999999999999999와 같은 정수는 작성할 수 없다. - 단항식은 변수 또는 정수이다.
- 라이언은 아래 두 개의 비교 연산자를 사용하여 논리식을 만든다.
- 같음 연산자
==:<a>==<b>와 같이 사용하며, 두 단항식<a>와<b>의 값을 계산하여, 같으면true를, 다르면false를 반환한다. - 다름 연산자
!=:<a>!=<b>와 같이 사용하며, 두 단항식<a>와<b>의 값을 계산하여, 다르면true를, 같으면false를 반환한다. - 위의 두 연산자 모두, 연산자의 좌변과 우변에는 오직 단항식만이 올 수 있다. 예를 들어,
(a==b)!=(b==c)는!=의 좌변과 우변에 단항식이 아닌 논리식이 들어 있으므로 라이언이 사용하는 논리식이 아니다.
- 같음 연산자
- 라이언은 논리곱 연산자
&&로 한 개 이상의 논리식들을 연결하여 조건문을 만든다. 연결한 논리식들이 모두true를 반환할 때에만true, 그렇지 않다면false를 반환하도록 할 것이다. 연결할 때에 공백 등을 삽입하지 않는다. 예를 들어, 라이언이 세 논리식a==b,b!=c,1!=a를 연결하고자 한다면,a==b&&b!=c&&1!=a와 같이 연결한다.
</ul>
라이언이 작성하고자 하는 조건문 S는 위 문단에서 언급한 방법으로만 만들 수 있음이 보장된다.
하지만, 라이언은 남은 시간에 비해 S의 길이가 너무 길다고 생각하여, S와 동치이면서 위에서 제시된 방법으로 만들 수 있는 길이가 가장 짧은 조건문 S'을 대신 입력할 생각이다. 두 조건문 T1과 T2가 동치라는 것은, 어떤 변수 (조건문에 등장하지 않는 모든 가능한 변수도 포함) 에 어떤 값 (라이언이 작성하지 않는 정수도 가능)을 넣더라도 T1의 참/거짓 여부와 T2의 참/거짓 여부가 같다는 것이다.
라이언을 위해, S'을 대신 구해주는 프로그램을 작성하자. S'이 여러 가지 있다면, 그 중 하나를 아무거나 구해주면 된다.
<script> var endTime = new Date("9999-08-04 19:00:00+0900").getTime(); setInterval(function() { var currentTime = new Date().getTime(); var diff = endTime - currentTime; if (diff < 0) diff = 0; var hours = Math.floor(diff / 1000 / 60 / 60) % 24; var minutes = Math.floor(diff / 1000 / 60 % 60); var seconds = Math.floor(diff / 1000 % 60); $("#remaining-time").text(("0" + hours).slice(-2) + ":" + ("0" + minutes).slice(-2) + ":" + ("0" + seconds).slice(-2)); }, 1000);</script> ## 입력 형식첫 번째 줄에 라이언이 입력하고자 하는 조건문 S(1 ≤ |S| ≤ 106)가 주어진다.
출력 형식
첫 번째 줄에 S와 동치이면서, 문제 본문에 제시된 방법으로 만들 수 있는 길이가 가장 짧은 조건문 S'을 출력한다.
예제 입력 1
festival==kakao&&festival==2018&&haha==123456&&hoho!=123456
예제 출력 1
festival==2018&&kakao==2018&&haha==123456&&hoho!=haha
예제 입력 2
kakaocodefestival==-20180804&&hello!=-20180804
예제 출력 2
kakaocodefestival==-20180804&&hello!=-20180804
예제 입력 3
a==b&&b==c&&c==a
예제 출력 3
a==b&&a==c
예제 입력 4
int==float
예제 출력 4
int==float
예제 입력 5
a==A&&B==b
예제 출력 5
A==a&&b==B
Comments