반응형

1. 문제

- [백준 C#] 1330번 두 수 비교하기
// https://www.acmicpc.net/problem/1330

 

 

두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

 

2. 문제 포인트

  • 두 수를 입력 받는다
  • 비교하여 출력한다

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B5_01330번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int[] in_data = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);

            // 앞수가 큰 경우
            if (in_data[0] > in_data[1])
            {
                Console.WriteLine(">");
            }
            // 뒷쪽 숫자가 큰 경우
            else if (in_data[0] < in_data[1])
            {
                Console.WriteLine("<");
            }
            // 둘다 해당되지 않는 두 수가 같을 경우
            else
            {
                Console.WriteLine("==");
            }
        }
    }
}

// 1330번 두 수 비교하기
// https://www.acmicpc.net/problem/1330
반응형
반응형

1. 문제

- [백준 C#] 2753번 윤년
// https://www.acmicpc.net/problem/2753

 

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.

윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.

예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.

 

2. 문제 포인트

  • 년도 입력 받기
  • 4의 배수면서 400의 배수는 윤년
  • 4의 배수면서 100의 배수는 윤년 아님
  • 4의 배수면서 100의 배수가 아니면 윤년

 

 

반응형

 

 

3. 전체 코드

using System;

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

            // 4로 안나눠지면 윤년이 아님
            if (year % 4 == 0)
            {
                // 400으로 나눠지면 윤년
                if (year % 400 == 0)
                {
                    Console.WriteLine("1");
                }

                // 400으로 안나눠지고 100으로만 나눠지면 윤년 아님
                else if (year % 100 == 0)
                {
                    Console.WriteLine("0");
                }
                // 100, 400으로 나눠지지 않고 4로만 나눠지면 윤년 
                else
                {
                    Console.WriteLine("1");
                }
            }
            else
            {
                Console.WriteLine("0");
            }
        }
    }
}

// 2753번 윤년
// https://www.acmicpc.net/problem/2753
반응형
반응형

1. 문제

- [백준 C#] 9498번 시험 성적  (https://www.acmicpc.net/problem/9498)

 

시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 점수 입력 받기
  • 각 구간별 글자 출력

 

 

반응형

 

 

3. 전체 코드

using System;

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

            if (score >= 90)
            {
                Console.WriteLine("A");
            }
            else if (score >= 80)
            {
                Console.WriteLine("B");
            }
            else if (score >= 70)
            {
                Console.WriteLine("C");
            }
            else if (score >= 60)
            {
                Console.WriteLine("D");
            }
            else
            {
                Console.WriteLine("F");
            }
        }
    }
}

// 9498번 시험 성적
// https://www.acmicpc.net/problem/9498
반응형
반응형

1. Point

  • 셀에 엑셀 함수를 넣어 계산하기

 

 

 

반응형

 

 

 

2. 전체 코드

// 참조 추가
using System.IO;
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");


                // A1 ~ A11까지 0~10까지 숫자 넣기
                for (int i = 0; i < 11; i++)
                {
                    sheet1.CreateRow(i).CreateCell(0).SetCellValue(i);
                }


                // 셀에 함수 넣기
                // 엑셀에서 사용되는 함수에 앞에 '='만 빼고 넣으면 된다
                sheet1.CreateRow(11).CreateCell(0).SetCellFormula("sum(A1:A11)");


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

1. Point

  • 생성한 엑셀 시트의 셀에 값 넣기
  • 반복문을 이용한 셀 값넣기
  • 변수를 이용한 셀 값 넣기

 

 

반응형

 

 

2. 전체 코드

// 참조 추가
using System.IO;
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.core.xlsx";

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

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


				// 셀에 값 넣기
                var cell_1 = sheet1.CreateRow(0).CreateCell(0);

                cell_1.SetCellValue("Cell_A0");

                for (int i = 1; i < 11; i++)
                {
                    sheet1.CreateRow(i).CreateCell(0).SetCellValue("Cell_A" + i + " (for loop)");
                }

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

1. Point

  • 사전 준비 : '참조 - NuGet' 에서 NPOI를 설치
  • 엑셀 파일 생성
  • 워크 시트 생성
  •  

 

반응형

 

 

2. 전체 코드

// 참조 추가
using System.IO;
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.core.xlsx";

            using (var fs = new FileStream(newFile, FileMode.Create, FileAccess.Write))
            {
				// 워크북 생성
                IWorkbook workbook = new XSSFWorkbook();

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

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

1. 사용자가 많다

내가 라이브러리 선택하는 요소 중 가장 중요한 요소이다.

사용자가 많으면 그만큼 문제가 발생했을때 쉽게 검색과 대처가 가능하다.

 

 

 

반응형

 

2. 편의성

Microsoft.Office.Interop.Excel은 안정적이지 않았다.

가장 큰 문제는 파일 작성 후 excel 프로세스가 닫히지 않는 문제점

강제로 Marshal.ReleaseComObject()로 다 닫아줘야 하는데 코드가 길어지다보면 안되는 경우가 많이 발생한다.

또한 실행된 모든 excel을 종료하다보니 보고 있던 엑셀파일마저 닫혀버린다

그 상태로 다시 코드가 실행되면 또 다른 excel 프로세스가 실행된다.

 

NPOI는 경험상 아직 이런 문제는 발생하지 않았다.

많이 쓰는 오픈소스인데 이런 이슈가 없는것을 보면 없다고 봐도 무방할듯 하다.

반응형
반응형

1. Point

  • 폴더 / 파일 삭제하기 (delete)
  • 폴더 / 파일 복사 - 붙여넣기 (copy)
  • 폴더 / 파일 잘라내기 - 붙여넣기 (move)

 

반응형

 

 

2. 전체 코드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.IO;

namespace manual_file_MoveCopyDelete
{
    internal class Program
    {
        static void Main(string[] args)
        {
            DirectoryInfo s_path = new DirectoryInfo(@".\test_dir");
            DirectoryInfo t_path = new DirectoryInfo(@".\test_dir2");

            DirectoryInfo s_path2 = new DirectoryInfo(@".\test_dir3");
            DirectoryInfo t_path2 = new DirectoryInfo(@".\test_dir4");

			// 폴더 4개 생성
            s_path.Create();
            t_path.Create();
            s_path2.Create();
            t_path2.Create();

            // 파일 유무 확인
            // 'Directory.GetCurrentDirectory()' 현재 실행중인 프로그램의 위치 반환
            FileInfo file = new FileInfo(Directory.GetCurrentDirectory() + "/test_dir/test2.txt");
            if (!file.Exists)
            {
                FileStream fs = file.Create();
                fs.Close();
            }


            // 파일 복사
            // test_dir의 test2.txt를 t_path경로로 복사한다
            // true = 덮어쓰기 허용 여부
            // t_path 뒤의 이름을 변경하여 복사 하면서 파일 이름 변경도 한번에 가능하다.
            System.IO.File.Copy(s_path.ToString() + @"\test2.txt", t_path.ToString() + @"\test_copy.txt", true);
            System.IO.File.Copy(s_path.ToString() + @"\test2.txt", s_path2.ToString() + @"\test_copy.txt", true);

            // 파일 이동
            // t_path 뒤의 이름을 변경하여 복사 하면서 파일 이름 변경도 한번에 가능하다.

            System.IO.File.Move(s_path.ToString() + @"\test2.txt", t_path.ToString() + @"\test_move.txt");


            // 폴더 복사
            // test_dir3번 폴더가 test_dir4번 폴더 아래 dir폴더로 이름이 바뀌어 이동(move)
            System.IO.Directory.Move(s_path2.ToString(), t_path2.ToString() + @"/dir");

            // 폴더 삭제
            // true = 하위 폴더/파일 모두 삭제 여부
            System.IO.Directory.Delete(t_path2.ToString(), true);
        }
    }
}
반응형

+ Recent posts