SMALL

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

 

2164번: 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가

www.acmicpc.net


  • 문제


  • 문제풀이

Queue를 생성해주고 맨 앞의 Queue만 빼주고 나머지는 빼고 다시 집어넣어준다.


  • 코드 1
namespace YongYong2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int N=int.Parse(Console.ReadLine());
            Queue<int> q=new Queue<int>();

            for(int i=1;i<=N; i++)
            {
                q.Enqueue(i);
            }
            while (q.Count > 1)
            {
                q.Dequeue();
                q.Enqueue(q.Dequeue());
            }
            Console.WriteLine("{0}",q.Dequeue());
        }
    }
}

  • 후기

Enqueue와 Dequeue를 이해하기 좋은 문제이다.

LIST

'백준 > C#' 카테고리의 다른 글

[C#]백준 1966번: 프린터 큐  (0) 2023.01.28
[C#]백준 11866번: 요세푸스 문제 0  (0) 2023.01.28
[C#]백준 9012번: 괄호  (0) 2023.01.14
[C#]백준 10773번: 제로  (0) 2023.01.05
[C#]백준 2775번: 부녀회장이 될테야  (0) 2023.01.05
SMALL

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

 

2563번: 색종이

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변

www.acmicpc.net


  • 문제


  • 문제풀이

100X100 사이즈의 배열에 0을 채워넣고 색종이가 가리는 구간을 1로 바꿔준 뒤에 1의 개수를 세어준다.


  • 코드 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h> 
#include <iostream>

int main() {
	int arr[100][100] = { 0, };
	int cnt=0, N=0;
	int x, y;

	scanf("%d", &N);

	for (int i = 0; i < N; i++) {
		scanf("%d %d", &x, &y);
		for (int j = x - 1; j < x - 1 + 10; j++)
			for (int k = y - 1; k < y - 1 + 10; k++)
				arr[j][k] = 1;
	}

	for (int i = 0; i < 100; i++)
		for (int j = 0; j < 100; j++)
			if (arr[i][j] == 1)
				cnt++;

	printf("%d", cnt);
	return 0;
}

  • 후기

배열을 사용하여 넓이를 구하는 방법을 알게되었다.

LIST
SMALL

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

 

2566번: 최댓값

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

www.acmicpc.net


  • 문제


  • 문제풀이

2차원 배열을 생성하고 가장 큰 값을 temp에 저장하여 최댓값을 찾았고 i와 j에 1을 더해 몇번째 칸인지 찾았다.

 


  • 코드 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h> 
#include <iostream>

int main()
{
	int arr[9][9];
	int temp = 0;
	int x, y = 0;
	for (int i = 0; i < 9; i++) {
		for (int j = 0; j < 9; j++) {
			scanf("%d", &arr[i][j]);
			if (arr[i][j] >= temp) {
				temp = arr[i][j];
				x = i+1;
				y = j+1;
			}
		}
	}
	printf("%d \n", temp);
	printf("%d %d", x, y);
	return 0;
}

  • 후기

2차원 배열을 사용해보았다.

LIST
SMALL

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

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net


  • 문제


  • 문제풀이

문장을 char형태로 받은 후 다시 배열로 받아 문자열별로 판단하여 Push와 Pop을 진행하였다.

 


  • 코드 1
using System.Collections.Generic;
using System;
using System.Collections;
using System.Text;
using System.Diagnostics.CodeAnalysis;

namespace yongyong2
{
    internal class Program
    {
       
        public static void Main(string[] args)
        {
            Stack<string> stack = new Stack<string>();
            int input = int.Parse(Console.ReadLine());
            string[] output= new string[input];

            for (int i=0;i<input;i++)
            {
                string sentence = Console.ReadLine();
                char[] arr= sentence.ToCharArray();
                stack.Clear();
                
                for(int j=0;j<arr.Length;j++)
                {
                    if (arr[j] == '(')
                    {
                        stack.Push("(");
                    }
                    else if (sentence[j] == ')')
                    {

                        if (stack.Count != 0)
                        {
                            stack.Pop();
                            output[i] = "YES";
                        }
                        else
                        {
                            output[i] = "NO";
                            break;
                        }
                    }
                    if (stack.Count != 0)
                    {
                        output[i] = "NO";
                    }
                }
                
            }
            for(int i=0;i<input;i++)
            {
                Console.WriteLine(output[i]);
            }
            

            

        }

    }
}

  • 후기

문장을 받을때는 char배열로 받은후 배열로 바꿔주면 됨을 알 수 있었다.

LIST

'백준 > C#' 카테고리의 다른 글

[C#]백준 11866번: 요세푸스 문제 0  (0) 2023.01.28
[C#]백준 2164번: 카드2  (0) 2023.01.28
[C#]백준 10773번: 제로  (0) 2023.01.05
[C#]백준 2775번: 부녀회장이 될테야  (0) 2023.01.05
[C#]백준 10828번: 스택  (0) 2023.01.05
SMALL

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

 

2292번: 벌집

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌

www.acmicpc.net


  • 문제


  • 문제풀이

이 그림을 보았을 때 가운데 방은 1이고 두번째 칸은 1~7, 세번째 칸은 8~19 이런식으로 방번호가 배정된다.

N번째 칸 방의 번호 해당수의 차이
1번째 칸 1  
2번째 칸 2~7 5
3번째 칸 8~19 11
4번째 칸 20~37 17
5번째 칸 38~61 23

해당수의 차이를 보면 6씩 차이가 나는 규칙을 찾을 수 있다.

1, 1+6*1, 1+6*2...과 같은 식을 만들 수 있다. 층을 높혀가면서 입력한 수와 칸에서 가장 높은 수를 비교하여

답을 찾을 수 있다.

 


  • 코드 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h> 


int main() {
	int N;
	scanf("%d", &N);

	int roomnum = 1;
	int layer = 0;
	while (1) {
		if (N <= roomnum) break;

		layer++;
		roomnum += 6 * layer;
	}

	printf("%d", layer + 1);
}

  • 후기

규칙은 빠르게 발견했다고 생각했는데 코드로 구현하려고 하니 너무 힘들었다. 고등학교때 무슨 수열이라고 배웠던 것 같은데 무엇인지 기억이 안난다...

LIST

'백준 > C언어' 카테고리의 다른 글

[C언어]백준 2563: 색종이  (0) 2023.01.28
[C언어]백준 2566번: 최댓값  (0) 2023.01.28
[C언어]백준 1712번: 손익분기점  (0) 2023.01.13
[C언어]백준 2525: 오븐시계  (0) 2023.01.05
[C언어]백준 1193번: 분수찾기  (0) 2023.01.05
SMALL

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

 

1712번: 손익분기점

월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와

www.acmicpc.net



  • 문제풀이

A+B*N<C*N의 식을 사용하여 문제를 풀어본다.

 


  • 코드 1
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h> 

int main() {
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);
	if (b >= c) {
		printf("-1");

	}
	else {
		printf("%d", a / (c - b) + 1);

	}
}

  • 후기

공식을 손으로 써보는게 도움이 많이 되었다.

LIST

'백준 > C언어' 카테고리의 다른 글

[C언어]백준 2566번: 최댓값  (0) 2023.01.28
[C언어]백준 2292번: 벌집  (0) 2023.01.13
[C언어]백준 2525: 오븐시계  (0) 2023.01.05
[C언어]백준 1193번: 분수찾기  (0) 2023.01.05
[C언어]백준1110번: 더하기 사이클  (0) 2023.01.05
SMALL

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

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net


  • 문제


  • 문제풀이

분과 오븐의 타임을 더한 후 60으로 나누어 준다. 만약 더해진 시간과 현재 시간을 더했을 때 24시가 넘는다면 -24를 아니라면 그대로 출력해준다.

 


  • 코드 1
#include <stdio.h>
int main() {

int hour;
int min;
int time;

scanf("%d %d %d",&hour, &min, &time);
int total=0;
total+=(min+time)/60;
if(hour+total>=24){
    printf("%d %d",hour+total-24,(min+time)%60);
}
else
printf("%d %d",hour+total,(min+time)%60);

}

  • 후기

수학의 문제를 푸는 기분이다.

LIST
SMALL

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

 

1193번: 분수찾기

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

www.acmicpc.net


  • 문제


  • 문제풀이

2의 배수일 때와 아닐때의 규칙을 찾는다면 쉽게 할 수 있다.

 


  • 코드 1
#include <iostream>
#include <stdio.h>

using namespace std;

int x,d,t;
int main() {
    scanf("%d",&x);
    for(;d*(d+1)/2<x;d++){
    }
   t=x-d*(d-1)/2;
    if(d%2==0){
        printf("%d/%d",t,d-t+1);
    }
    else{
        printf("%d/%d",d-t+1,t);
    }
}

  • 후기

규칙을 찾는것이 큰 도움이 되었다.

LIST

+ Recent posts