(class 2)

n=int(input())
queue=[]

for i in range(n):
    cmd=input().split()

    if cmd[0]=="push":
        queue.append(cmd[1])
    elif cmd[0]=="pop":
        if len(queue)==0:
            print(-1)
        else:
            print(queue.pop(0))
    elif cmd[0]=="size":
        print(len(queue))
    elif cmd[0]=="empty":
        if len(queue)==0:
            print(1)
        else:
            print(0)
    elif cmd[0]=="front":
        if len(queue)==0:
            print(-1)
        else:
            print(queue[0])
    elif cmd[0]=="back":
        if len(queue)==0:
            print(-1)
        else:
            print(queue[-1])

<코드 설명>

먼저 명령어의 개수인 n을 입력받았다. 그리고 이 n만큼 for문으로 반복시켜주었다.

for문 내에서 cmd에 명령어를 입력받도록 하였고, split을 통해 한번에 여러개를 입력받았다.

 

cmd[0]이 push일 때,  queue에 cmd[1]값을 넣어주었다.

cmd[0]이 pop일 때, queue가 empty 상태일 때 (queue의 길이가 0일때) -1을 출력해주었고, 그렇지 않으면 0번째 원소를 pop해주었다.

cmd[0]이 size일 때, queue의 길이를 출력해주었다.

cmd[0]이 empty일 때, queue의 길이가 0이면 1을 출력해주고 그렇지 않으면 0을 출력해주었다.

cmd[0]이 front일 때, queue가 empty 상태일 때 (queue의 길이가 0일때) -1을 출력해주고, 그렇지 않으면 queue의 첫번째 원소인 0번째 원소를 출력해주었다.

cmd[0]이 back일 때, queue가 empty 상태일 때 (queue의 길이가 0일때) -1을 출력해주고, 그렇지 않으면 queue의 마지막 원소인 -1번째 원소를 출력해주었다.

 

<실행결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BoJ] 1120 문자열  (0) 2022.05.01
[BOJ] 10866 덱  (0) 2022.04.29
[BoJ] 4673 셀프 넘버  (0) 2022.04.03
[BOJ] 1929 소수 구하기  (0) 2022.04.02
[BOJ] 10828 스택  (0) 2022.04.02

#include<stdio.h>
int func(int n) {
	int sum = n;
	while (n > 0) {
		sum += n % 10;
		n = n / 10;
	}
	return sum;
}

int main()
{
	int i, arr[10001] = { 0 }, result;
	for (i = 1; i <= 10000; i++) {
		result = func(i);
		if (result < 10001) {
			arr[result] = 1;
		}
	}
	for (i = 1; i <= 10000; i++) {
		if (arr[i] != 1) {
			printf("%d\n", i);
		}
	}
	return 0;
}

<코드 설명>

- func 함수 : 인자값을 sum에 넣어준다. sum에 n을 10으로 나눈 나머지(일의 자리)를 더해주며, n을 10 나눠준다(십의 자리). 또 이 십의 자리를 더해주며 이를  n이 0보다 클 때까지 반복시켜준다. 

 

  먼저 배열 arr를 만들어주었다. 10000까지의 수를 확인해주어야 하기 때문에 이를 for문을 통해 i가 1부터 10000까지 반복시켜주었다. result에 func(i)를 저장해주고 result가 10001 미만이면 arr[result]에 1을 저장시켜준다. 그리고 이 과정이 끝나면 arr의 저장값이 1이 아닌 경우만 출력해주었다.

 

<실행 결과>

 

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 10866 덱  (0) 2022.04.29
[BOJ] 10845 큐  (0) 2022.04.28
[BOJ] 1929 소수 구하기  (0) 2022.04.02
[BOJ] 10828 스택  (0) 2022.04.02
[SISS] C 백준 8주차 (11720, 1085, 10250)  (0) 2022.02.14

(class 2)

- 1차 코드

#include<stdio.h>
int main()
{
	int start, end, i, j;
	
	scanf("%d %d", &start, &end);
	for (i = start; i <= end; i++) {
		int prime = 1;
		for (j = 2; j < i; j++) {
			if (i % j == 0) {
				prime = 0;
			}
		}
		if (prime == 1) {
			printf("%d\n", i);
		}
	}

}

실패 원인 : 시간 초과

  1차 코드는 실행은 잘 되었지만 시간 초과로 실패하였다. 따라서 코드의 효율성을 따질 필요가 있었다.

검색해본 결과, '에라토스테네스의 체' 방식을 사용해야 함을 알게되었다.

 

- 성공 코드

#include<stdio.h>
int arr[1000001];
int main()
{
	int start, end, i, j;

	scanf("%d %d", &start, &end);

	arr[0] = arr[1] = 1;

	for (i = 2; i <= end; i++) {
		for (j = 2 * i; j <= end; j += i) {
			if (arr[j] == 0) arr[j] = 1;
		}
	}

	for (i = start; i <= end; i++) {
		if (arr[i] == 0) printf("%d\n", i);
	}
	return 0;
}

<코드 설명>

  배열 arr을 만들어 소수이면 0, 아니면 1을 저장하도록 하였다. 입력값인 시작값(start)과 끝값(end)를 먼저 입력받았다.

i를 2부터 end까지 for문을 돌려주고 그 안에서 i의배수에 해당하는 것들을 차근히 지워나가주게 된다. 이처럼 원소 값이 1이 된 것들을 제외하고 나머지를 출력해준다.

 

<실행 결과>

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 10845 큐  (0) 2022.04.28
[BoJ] 4673 셀프 넘버  (0) 2022.04.03
[BOJ] 10828 스택  (0) 2022.04.02
[SISS] C 백준 8주차 (11720, 1085, 10250)  (0) 2022.02.14
[SISS] C 백준 7주차 (10809, 10818, 10871)  (0) 2022.02.08

(class 2)

#include<stdio.h>
#include<string.h>

int arr[10000];
int i = 0;

void push(int n) {
	arr[i] = n;
	i++;
}

void pop() {
	if (i != 0) {
		i--;
		printf("%d\n", arr[i]);
		arr[i] = 0;
	}
	else {
		printf("-1\n");
	}
}

void size() {
	printf("%d\n", i);
}

void empty() {
	if (i != 0) {
		printf("0\n");
	}
	else {
		printf("1\n");
	}
}

void top() {
	if (i != 0) {
		printf("%d\n", arr[i - 1]);
	}
	else {
		printf("-1\n");
	}
}

int main()
{
	int num, j;
	char word[10];
	scanf("%d", &num);
	for (j = 0; j < num; j++) {
		scanf("%s", &word);

		if (!strcmp(word, "push")) {
			int data;
			scanf("%d\n", &data);
			push(data);
		}
		else if (!strcmp(word, "pop")) {
			pop();
		}
		else if (!strcmp(word, "size")) {
			size();
		}
		else if (!strcmp(word, "empty")) {
			empty();
		}
		else if (!strcmp(word, "top")) {
			top();
		}
	}
	return 0;
}

<코드 설명>

전역변수로 배열 arr와 인덱스인 i를 선언해주었다.

 

- push 함수 : arr[i]에 함수 인자값을 넣어주고 인덱스인 i를 1 증가시켜준다.

- pop 함수 : 인덱스가 0이 아닐 경우, i를 1 감소시켜주고 arr[i]를 출력시키며 해당 값을 0으로 만들어준다. 인덱스가 0일경우에는 -1을 출력시켜준다.

- size 함수 : 인덱스인 i를 출력시킨다.

- empty 함수 : 인덱스가 0이 아닐 경우, 0을 출력시켜준다. 인덱스가 0일 경우에는 1을 출력시켜준다.

- top 함수 : 인덱스가 0이 아닐 경우, arr[i-1]을 출력시켜준다. 인덱스가 0일 경우 -1을 출력시켜준다.

 

  수행시킬 명령문의 개수인 num을 입력받고 그만큼 for문을 통해 반복시켜주었다. for문 내에서 수행할 명령인 word를 입력받았으며, strcmp함수로 word와 각 수행문의 문자가 동일한지 확인해준 후, 동일할 경우 해당 함수를 실행시켜주었다.

 

 

<실행 결과>

 

+ Recent posts