반응형

1. 문제

- [백준 C#] 2562번 최댓값 (C#)  (https://www.acmicpc.net/problem/2562)

 

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

 

 

2. 문제 포인트

  • 숫자 9개를 반복문으로 입력 받는다
  • 입력 받은 숫자중 최댓값을 출력한다
  • 최댓값의 인덱스를 출력한다 (index 시작은 1부터 시작해야 한다)

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Collections.Generic;
using System.Linq;

namespace B3_02562번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            List<int> num = new List<int>();
            
            // 9번 반복하며 num에 원소를 하나씩 추가한다
            for (int i = 0; i < 9; i++)
            {
                num.Add(int.Parse(Console.ReadLine()));
            }

            // num의 원소중 가장 큰 값을 출력
            Console.WriteLine(num.Max());
            
            // mum의 가장 큰 원소의 인덱스값 출력
            Console.WriteLine(num.IndexOf(num.Max()) + 1 );
        }
    }
}

// 2562번 최댓값
// https://www.acmicpc.net/problem/2562

 

반응형
반응형

1. 문제

- [백준 C#] 8958번 OX 퀴즈 (C#)  (https://www.acmicpc.net/problem/8958)

 

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 케이스 수 입력 받기
  • OX결과값을 입력 받기
  • 'X'를 기준으로 문자열을 나눠 각 요소별로 'O'의 연속 개수를 카운팅하여 점수 계산

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Collections.Generic;

namespace B2_08958번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int cnt = int.Parse(Console.ReadLine());
            int score = 0;

            for (int i= 0; i < cnt; i++)
            {
                // 'X'를 기준으로 리스트를 나누기
                List<string> ans = new List<string>(Console.ReadLine().Split('X'));
                score = 0;

                // 각 요소(연속된 'O'의 묶음)의 개수를 이용해 점수 계산
                for (int j= 0; j < ans.Count; j++)
                {
                    for (int k= 1; k <= ans[j].Length; k++)
                    {
                        score += k;
                    }
                }
                // 입력된 결과같에 대한 점수 출력
                Console.WriteLine(score);
            }
            
        }
    }
}

// 8958번 OX퀴즈
// https://www.acmicpc.net/problem/8958
반응형
반응형

1. 문제

- [백준 C#] 4344번 평균은 넘겠지 (C#)  (https://www.acmicpc.net/problem/4344)

 

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

 

 

2. 문제 포인트

  • 테스트 케이스 수 입력 받기
  • 각 케이스마다 학생수 및 성적 입력 받기
  • 각 케이스별 성적 평균을 계산해 전체 학생중 평균 넘는 사람의 숫자를 백분율로 표시 (소수점 3자리)

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Collections.Generic;
using System.Linq;

namespace B1_04344번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int cnt_class = int.Parse(Console.ReadLine());
            float student_num = 0;

            for (int i = 0; i < cnt_class; i++)
            {
                List<float> list = new List<float>( Array.ConvertAll(Console.ReadLine().Split(), float.Parse));
                student_num = list[0];
                list.Remove(list[0]);

                // 람다식을 이용해 평균 성적보다 높은 점수들의 리스트를 구한다
                list = list.Where(n => n > list.Average()).ToList();

                // String.Format()을 이용하여 소수점 3자리까지만 출력
                Console.WriteLine(String.Format("{0:0.000}%", list.Count() / student_num * 100));

            }
        }
    }
}

// 4344번 평균은 넘겠지
// https://www.acmicpc.net/problem/4344
반응형
반응형

1. 문제

- [백준 C#] 1546번 평균 (C#)  (https://www.acmicpc.net/problem/1546)

 

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 과목 개수 n 입력 받기
  • 각각의 성적 n개 입력 받기
  • 문제에서 요구하는 방식으로 계산
    (모든 점수를 점수/M*100)

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Collections.Generic;
using System.Linq;

namespace B1_01546번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int cnt = int.Parse(Console.ReadLine());
            List<double> list = new List<double>( Array.ConvertAll(Console.ReadLine().Split(), double.Parse));

            // 리스트를 내림차순 정렬
            list = list.OrderByDescending(x => x).ToList();

            double max = list.Max();
            
            // 각각의 성적을 문제의 요구사항대로 변환
            for (int i = 0; i < cnt; i++)
            {
                list[i] = list[i] / max * 100;
            }

            // 평균값 출력
            Console.WriteLine(list.Average());
        }
    }
}

// 1546번 평균
// https://www.acmicpc.net/problem/1546
반응형
반응형

1. 문제

- [백준 C#] 1110번 더하기 사이클
// https://www.acmicpc.net/problem/1110

 

 

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 숫자를 입력 받는다
  • 숫자가 한자리일 경우 앞에 "0"을 붙여 두자리 숫자를 만든다
  • 위의 공식대로 계산한다

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B1_01110번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string num = Console.ReadLine();

            // 입력이 한자리수인경우 왼쪽에 0을 붙여 예외가 발생하지 않도록 만든다
            if (num.Length == 1)
            {
                num = "0" + num;
            }

            string origin = num;
            int cnt = 0;
            int sum;
            string s_sum;

            while (true)
            {
                sum = int.Parse(num[0].ToString()) + int.Parse(num[1].ToString());
                s_sum = sum.ToString();

                // 2개의 숫자를 더한값의 1의 자리와 처음 숫자 1의자리를 붙이기
                // string을 자르면 char이 되기에 꼭 ToString()을 붙여야 한다
                num = num[1] + s_sum[s_sum.Length - 1].ToString();
                cnt += 1;

                if (num == origin)
                {
                    break;
                }
            }
            Console.WriteLine(cnt);
        }
    }
}

// 1110번 더하기 사이클
// https://www.acmicpc.net/problem/1110
반응형
반응형

1. 문제

- [백준 C#] 2439번 별 찍기 - 2
// https://www.acmicpc.net/problem/2439

 

 

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

 

 

2. 문제 포인트

  • 문자열 보간을 이용하여 양식을 생성한다.
  • 양식에 맞춰 테이터를 출력한다.

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B4_02439번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int cnt = int.Parse(Console.ReadLine());

            // 문자열 보간 양식 생성
            string a = "{0, " + cnt.ToString() + "}"; 


            for (int i = 1; i <= cnt; i++)
            {
                string star = "";
                for (int j = 1; j <= i; j++)
                {
                    star += "*";
                }

                // 위에서 생성한 문자열 보간으로 별 출력
                Console.WriteLine(a, star);
            }    
        }
    }
}

// 2439번 별 찍기 - 2
// https://www.acmicpc.net/problem/2439
반응형
반응형

1. 문제

- [백준 C#] 15552번 빠른 A+B
// https://www.acmicpc.net/problem/15552

 

 

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.
Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.
자세한 설명 및 다른 언어의 경우는 이 글에 설명되어 있다.
이 블로그 글에서 BOJ의 기타 여러 가지 팁을 볼 수 있다.

 

 

2. 문제 포인트

  • 첫행에 문제 수를 입력 받는다
  • 반복문으로 더할 값을 입력 받는다
  • Console.WriteLine()은 매번 반복문으로 출력할 경우 소요시간이 커 시간 초과가 나올 가능성이 높음

 

 

반응형

 

 

3. 전체 코드

using System;
using System.Collections.Generic;

namespace B4_15552번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int cnt = int.Parse(Console.ReadLine());

            int a;
            int b;
            
            List<int> list = new List<int>();
            for (int i = 0; i < cnt; i++)
            {
                string[] num = Console.ReadLine().Split();
                a = int.Parse(num[0]);
                b = int.Parse(num[1]);
                list.Add(a + b);
            }
            // 출력을 한번에 하는 이유
            //// for문으로 매번 출력하게되면 제한 시간에 걸려 시간초과가 된다
            /// \n을 사용함으로 한번에 여러줄로 출력을 한다
            Console.WriteLine(string.Join("\n", list));
        }
    }
}

// 15552번 빠른 A+B
// https://www.acmicpc.net/problem/15552
반응형
반응형

1. Point

  • 엑셀 셀에 폰트, 색상(color), bold, italic 및 정렬을 적용
  • 스타일에 추가하여 여러 셀에 한번에 적하는 방법

 

반응형

 

 

2. 전체 코드

// 참조 추가
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;

namespace manual_NPOI_excel_IO
{
    internal class Program
    {
        static void Main(string[] args)
        {
            var newFile = @"./dir/newbook.xlsx";

            using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
            {

                IWorkbook workbook = new XSSFWorkbook();

                // 시트 생성
                ISheet sheet1 = workbook.CreateSheet("Sheet1");



                // 셀에 적용할 스타일 생성
                var style1 = workbook.CreateCellStyle();
                style1.FillForegroundColor = HSSFColor.Blue.Index2;
                style1.FillPattern = FillPattern.SolidForeground;
                style1.Alignment = HorizontalAlignment.Center;
                style1.BorderBottom = BorderStyle.Medium;
                style1.BorderRight = BorderStyle.DashDotDot;

				
                // 폰트 설정
                IFont font1 = workbook.CreateFont();
                font1.FontName = "맑은 고딕";
                font1.Color = IndexedColors.Red.Index;
                font1.IsBold = true;
                font1.Underline = FontUnderlineType.Double;
                font1.IsItalic = true;
				
                // 앞서 설정한 셀 스타일에 폰트 추가
                style1.SetFont(font1);
                
                
                // 셀 선택 및 스타일 적용
                var cell2 = sheet1.CreateRow(0).CreateCell(0);
                cell2.CellStyle = style1;
                cell2.SetCellValue(0);



                // 작업 내용 파일에 작성 및 저장
                workbook.Write(fs);
            }
        }
    }
}
반응형

+ Recent posts