티스토리 뷰

#include <stdio.h>

int main(void)
{
	char arr[100] = {};
	char str[51] = {};
	scanf("%s", str);
	
	int left = 50, right = 50; //덱의 왼쪽 끝과 오른쪽 끝을 같은 곳에 위치 시켜둡니다.
	
	for(int i=0; str[i] != '\0'; i++) {
		if(arr[left] < str[i]) { //초기화를 0으로 했기에 처음 덱에 집어 넣을때는 덱의 오른쪽에 들어가게 됩니다.
			arr[right++] = str[i]; //값을 넣은 다음 right을 1 증가 시킵니다.
		} else arr[--left] = str[i]; //right와는 달리 left는 먼저 1 감소 시킨다음 값을 집어넣습니다.
	}
	
	for(int i=left; i<right; i++)
		printf("%c", arr[i]);
}

풀이 : 덱

 

1. 덱과 입력을 받을 배열을 준비합니다.

2. 문자열을 입력 받습니다.

3. 입력받은 문자열을 하나씩 덱에 집어넣습니다.

3.1 초기값은 바로 덱에 넣어줍니다 (덱을 배열로 만들었기에 중간에 둡니다)

3.2 덱의 가장 왼쪽 값 보다 값이 크다면 (아스키 코드로) 덱의 맨 오른쪽에 집어 넣습니다.

3.3 덱의 가장 왼쪽 값 보다 같거나 더 작다면 덱의 맨 왼쪽에 집어 넣습니다.

4. 덱을 가장 왼쪽부터 오른쪽까지 출력합니다.

 

https://www.acmicpc.net/problem/1464

 

1464번: 뒤집기 3

세준이는 어떤 문자열 S를 뒤집으려고 한다. 문자열을 뒤집는 방법은 문자열의 길이를 N이라고 하자. i만큼을 뒤집는다는 소리는 그 문자열의 처음부터 정확하게 i개의 문자를 역순으로 뒤집는

www.acmicpc.net

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함