어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. ‘radar’, ‘sees’는 팰린드롬이다.
수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.
아직 글을 모르는 영석이가 벽에 걸린 칠판에 자석이 붙어있는 글자들을 붙이는 장난감을 가지고 놀고 있다.
이 장난감에 있는 글자들은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’이다. 영석이는 칠판에 글자들을 수평으로 일렬로 붙여서 단어를 만든다. 다시 그 아래쪽에 글자들을 붙여서 또 다른 단어를 만든다. 이런 식으로 다섯 개의 단어를 만든다. 아래 그림 1은 영석이가 칠판에 붙여 만든 단어들의 예이다.
1 2 3 4 5
A A B C D D a f z z 0 9 1 2 1 a 8 E W g 6 P 5 h 3 k x
<그림 1>
한 줄의 단어는 글자들을 빈칸 없이 연속으로 나열해서 최대 15개의 글자들로 이루어진다. 또한 만들어진 다섯 개의 단어들의 글자 개수는 서로 다를 수 있다.
심심해진 영석이는 칠판에 만들어진 다섯 개의 단어를 세로로 읽으려 한다. 세로로 읽을 때, 각 단어의 첫 번째 글자들을 위에서 아래로 세로로 읽는다. 다음에 두 번째 글자들을 세로로 읽는다. 이런 식으로 왼쪽에서 오른쪽으로 한 자리씩 이동 하면서 동일한 자리의 글자들을 세로로 읽어 나간다. 위의 그림 1의 다섯 번째 자리를 보면 두 번째 줄의 다섯 번째 자리의 글자는 없다. 이런 경우처럼 세로로 읽을 때 해당 자리의 글자가 없으면, 읽지 않고 그 다음 글자를 계속 읽는다. 그림 1의 다섯 번째 자리를 세로로 읽으면 D1gk로 읽는다.
그림 1에서 영석이가 세로로 읽은 순서대로 글자들을 공백 없이 출력하면 다음과 같다:
Aa0aPAf985Bz1EhCz2W3D1gkD6x
칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오.
입력
총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’ 중 하나이다. 각 줄의 시작과 마지막에 빈칸은 없다.
출력
영석이가 세로로 읽은 순서대로 글자들을 출력한다. 이때, 글자들을 공백 없이 연속해서 출력한다.
cur_num = N ** 2 cur_x, cur_y = 0, 0 direction = 0 while cur_num > 0: snail[cur_y][cur_x] = cur_num ny, nx = move[direction] dx = cur_x + nx dy = cur_y + ny if0 > dx or dx >= N or0 > dy or dy >= N or snail[dy][dx] != 0: # 갈 수 없는 곳만 (방문했던 곳X, 벽X) direction = (direction + 1) % 4
알파벳 소문자(‘a‘-‘z‘), 숫자(‘0‘-‘9‘), 공백(‘‘), 특수 문자(‘<‘, ‘>‘)로만 이루어져 있다.
문자열의 시작과 끝은 공백이 아니다.
‘<‘와 ‘>‘가 문자열에 있는 경우 번갈아가면서 등장하며, ‘<‘이 먼저 등장한다. 또, 두 문자의 개수는 같다.
태그는 ‘<‘로 시작해서 ‘>‘로 끝나는 길이가 3 이상인 부분 문자열이고, ‘<‘와 ‘>‘ 사이에는 알파벳 소문자와 공백만 있다. 단어는 알파벳 소문자와 숫자로 이루어진 부분 문자열이고, 연속하는 두 단어는 공백 하나로 구분한다. 태그는 단어가 아니며, 태그와 단어 사이에는 공백이 없다.
for x in input_string: if x == '<': flag = 1 temp_stack.append(x) elif x == '>': flag = 0 temp_stack.append(x) result += temp_stack temp_stack = [] elif x == ' ': temp_stack.append(x) result += temp_stack temp_stack = [] else: if flag == 0: temp_stack.insert(0, x) elif flag: temp_stack.append(x)
N, M = map(int, input().split()) rectangle = [list(map(int, input().rstrip())) for _ inrange(N)]
max_edge = min(N, M) result = 0 for i inrange(N): for j inrange(M): for k inrange(max_edge): if i + k < N and j + k < M: if rectangle[i][j] == rectangle[i][j + k] == rectangle[i + k][j] == rectangle[i + k][j + k]: result = max(result, (k + 1) ** 2) print(result)
가장 처음에 N×N크기에 사탕을 채워 놓는다. 사탕의 색은 모두 같지 않을 수도 있다. 상근이는 사탕의 색이 다른 인접한 두 칸을 고른다. 그 다음 고른 칸에 들어있는 사탕을 서로 교환한다. 이제, 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분(행 또는 열)을 고른 다음 그 사탕을 모두 먹는다.
사탕이 채워진 상태가 주어졌을 때, 상근이가 먹을 수 있는 사탕의 최대 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 보드의 크기 N이 주어진다. (3 ≤ N ≤ 50)
다음 N개 줄에는 보드에 채워져 있는 사탕의 색상이 주어진다. 빨간색은 C, 파란색은 P, 초록색은 Z, 노란색은 Y로 주어진다.
defcheck(arr): n = len(board) answer = 1 for i inrange(n): cnt = 1 for j inrange(1, n): # 열 순회하면서 연속 숫자 세기 if arr[i][j] == arr[i][j - 1]: # 이전것과 같으면 cnt+1 cnt += 1 else: # 이전 것과 다르면 cnt=1 초기화 cnt = 1 if cnt > answer: answer = cnt
cnt = 1 for j inrange(1, n): # 행 순회하면서 연속 숫자 세기 if arr[j][i] == arr[j - 1][i]: # 이전것과 같으면 cnt+1 cnt += 1 else: # 이전 것과 다르면 cnt=1 초기화 cnt = 1 if cnt > answer: answer = cnt
return answer
N = int(input()) board = [list(input().rstrip()) for _ inrange(N)] result = 0
for i inrange(N): for j inrange(N): if j + 1 < N: # 열 체크 board[i][j], board[i][j + 1] = board[i][j + 1], board[i][j] # 인접 교환 temp = check(board) if temp > result: result = temp board[i][j], board[i][j + 1] = board[i][j + 1], board[i][j] # 원복
if i + 1 < N: # 행 체크 board[i][j], board[i + 1][j] = board[i + 1][j], board[i][j] # 인접 교환 temp = check(board) if temp > result: result = temp board[i][j], board[i + 1][j] = board[i + 1][j], board[i][j] # 원복
while i < k: compare_list[i], compare_list[k] = compare_list[k], compare_list[i] i += 1 k -= 1
print(*compare_list)
------------메모리초과 import sys from itertools import permutations
input = sys.stdin.readline
N = int(input()) compare_list = list(map(int, input().split())) num_list = [i for i inrange(1, N + 1)]
perm_list = list(permutations(num_list)) for i inrange(len(perm_list)): iflist(perm_list[i]) == compare_list: if i==0: print(-1) else: for num in perm_list[i-1]: print(num, end=" ")