목록백준 (28)
1seul357
크로스워드 퍼즐 쳐다보기 문제 크로스워드 퍼즐은 R*C크기의 직사각형으로 이루어져 있고, 각 칸은 비어있거나 막혀있다. 퍼즐은 가로(왼쪽->오른쪽) 또는 세로(위->아래)로 연속된 빈 칸에 단어를 채우면서 푼다. 동혁이는 크로스워드 퍼즐을 풀지 않는다. 그는 풀려있는 퍼즐을 쳐다본다. 그런 후에, 그는 그 퍼즐에서 사전순으로 제일 앞서는 단어를 찾는다. (단어는 적어도 2글자이다.) 크로스워드 퍼즐이 주어졌을 때, 사전순으로 제일 앞서는 단어를 출력하는 프로그램을 작성하시오. 해결방법 tmp : 단어 만드는 변수, cnt : 반복문 끝인지 확인할 변수, ans : 완성된 단어 넣을 리스트 가로와 세로 반복문을 돌면서 단어가 될 수 있는 문자열을 찾고, ans에 추가한다. "#"을 만나면 tmp가 한 글자..
회문 문제 회문(回文) 또는 팰린드롬(palindrome)은 앞 뒤 방향으로 볼 때 같은 순서의 문자로 구성된 문자열을 말한다. 만일 그 자체는 회문이 아니지만 한 문자를 삭제하여 회문으로 만들 수 있는 문자열이라면 우리는 이런 문자열을 “유사회문”(pseudo palindrome)이라고 부른다. 예를 들어 ‘summuus’는 5번째나 혹은 6번째 문자 ‘u’를 제거하여 ‘summus’인 회문이 되므로 유사회문이다. 만일 문자열 그 자체로 회문이면 0, 유사회문이면 1, 그 외는 2를 출력해야 한다. 해결방법 완벽한 회문인 경우 0 출력하고, 다음 반복문으로 넘어간다. 완벽한 회문이 아닌 경우에는 유사회문인지, 아닌지를 확인해야 한다. 문자열 전체를 탐색할 필요는 없으므로 문자열의 길이를 반으로 나눠서 ..
서로 다른 부분 문자열의 개수 문제 문자열 S가 주어졌을 때, S의 서로 다른 부분 문자열의 개수를 구하는 프로그램을 작성하시오. 부분 문자열은 S에서 연속된 일부분을 말하며, 길이가 1보다 크거나 같아야 한다. 예를 들어, ababc의 부분 문자열은 a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc가 있고, 서로 다른것의 개수는 12개이다. 해결방법 이중 반복문을 통해 만들 수 있는 문자열 모두 ans에 추가 set을 통해 중복 제거하고, 수 출력 소스코드 str = input() ans = [] for i in range(len(str)): tmp = '' for j in range(i, len(str)): tmp += str[j] an..
IPv6 문제 IPv6의 주소는 32자리의 16진수를 4자리씩 끊어 나타낸다. 이때, 각 그룹은 콜론 (:)으로 구분해서 나타낸다. 2001:0db8:85a3:0000:0000:8a2e:0370:7334 각 그룹의 앞자리의 0의 전체 또는 일부를 생략 할 수 있다. 위의 IPv6을 축약하면, 다음과 같다 2001:db8:85a3:0:00:8a2e:370:7334 만약 0으로만 이루어져 있는 그룹이 있을 경우 그 중 한 개 이상 연속된 그룹을 하나 골라 콜론 2개(::)로 바꿀 수 있다. 2001:db8:85a3::8a2e:370:7334 2번째 규칙은 모호함을 방지하기 위해서 오직 한 번만 사용할 수 있다. 올바른 축약형 IPv6주소가 주어졌을 때, 이를 원래 IPv6 (32자리의 16진수)로 복원하는 ..
회문은 회문아니야!! 문제 팰린드롬이란 앞으로 읽으나 뒤로 읽으나 같은 문자열을 말한다. 팰린드롬의 예시로 POP, ABBA 등이 있고, 팰린드롬이 아닌 것의 예시로 ABCA, PALINDROME 등이 있다. 같은 의미를 가지는 여러 단어들을 보자. 회문 (한국어) palindrome (영어, 프랑스어, 노르웨이어, 그리스어, 라틴어) palíndromo (스페인어, 포르투갈어) palindromo (이탈리아어, 에스페란토어) 알파벳 대문자로 이루어진 문자열이 주어졌을 때, 팰린드롬이 아닌 가장 긴 부분문자열의 길이를 구해 보자. 이때 부분문자열을 이루는 글자는 연속해야 한다. AB는 ABCD의 부분문자열이지만, AC는 아니다. 해결방법 테스트 케이스가 힌트이다. ABCBA 처럼 팰린드롬인 경우 : 전체..
단어 뒤집기2 문제 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 1. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 있다. 2. 문자열의 시작과 끝은 공백이 아니다. 3. ''가 문자열에 있는 경우 번갈아가면서 등장하며, '
비밀번호 발음하기 문제 좋은 패스워드를 만드는것은 어려운 일이다. 가장 이상적인 해결법은 '발음이 가능한' 패스워드를 만드는 것으로 적당히 외우기 쉬우면서도 안전하게 계정을 지킬 수 있다. 회사 FnordCom은 그런 패스워드 생성기를 만들려고 계획중이다. 당신은 그 회사 품질 관리 부서의 직원으로 생성기를 테스트해보고 생성되는 패스워드의 품질을 평가하여야 한다. 높은 품질을 가진 비밀번호의 조건은 다음과 같다. 1. 모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다. 2. 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다. 3. 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용한다. 이 규칙은 완벽하지 않다;우리에게 친숙하거나 발음이 쉬운 단어 중에서도 품질이 낮게 평가되는 경우..
듣보잡 문제 김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오. 해결방법 반복문을 다 돌면서 체크하면 시간초과 발생 set을 통해 이름 입력받으면서 중복 제거 공통되는 이름 꺼내서 arr 리스트에 저장 소스코드 N, M = map(int, input().split()) check = set() check_name = set() for _ in range(N): check.add(input()) for _ in range(M): check_name.add(input()) arr = sorted(list(check & check_name)) print(len(arr)) for i in range(len(arr)): print(..