반응형

1. 문제

- [백준 C# 기초] 10926번 ??!  (https://www.acmicpc.net/problem/10926)

 

준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 입력받은 값에 "??!"를 붙여서 출력

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B5_10926번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 입력받은 문자열에 "??!"을 붙여 출력
            Console.WriteLine(Console.ReadLine() + "??!");
        }
    }
}

// 10926번 ??!
// https://www.acmicpc.net/problem/10926
반응형
반응형

1. 문제

- [백준 C# 기초] 18108번 1998년생인 내가 태국에서는 2541년생?! (https://www.acmicpc.net/problem/18108)

 

ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다.

불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 입력받은 년도에 543을 빼고 출력

 

 

반응형

 

 

3. 전체 코드

using System;

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

            Console.WriteLine(y-543);
        }
    }
}

// 18108번 1998년생인 내가 태국에서는 2541년생?!
// https://www.acmicpc.net/problem/18108
반응형
반응형

1. 문제

- [백준 C# 기초] 25083번 새싹 (https://www.acmicpc.net/problem/25083)

 

아래 예제와 같이 새싹을 출력하시오.
         ,r'"7
r`-_   ,'  ,/
 \. ". L_r'
   `~\/
      |
      |

 

 

2. 문제 포인트

  • 콘솔창에 새싹 그림 출력

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B5_25083번
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 역슬래시(\)를 잘 확인해서 출력한다
            Console.WriteLine("         ,r'\"7");
            Console.WriteLine("r`-_   ,'  ,/");
            Console.WriteLine(" \\. \". L_r'");
            Console.WriteLine("   `~\\/");
            Console.WriteLine("      |");
            Console.WriteLine("      |");
        }
    }
}

// 25083번 새싹
// https://www.acmicpc.net/problem/25083
반응형
반응형

1. 문제

- [백준 C# 기초] 10869번 사칙연산 (https://www.acmicpc.net/problem/10869)

 

두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. 

 

2. 문제 포인트

  • 공백을 기준으로 2가지 숫자 입력
  • 5가지 계산을 한줄에 하나씩 출력

 

 

반응형

 

 

3. 전체 코드

using System;

namespace B5_사칙연산
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string[] in_data = Console.ReadLine().Split();

            Console.WriteLine(int.Parse(in_data[0]) + int.Parse(in_data[1]));
            Console.WriteLine(int.Parse(in_data[0]) - int.Parse(in_data[1]));
            Console.WriteLine(int.Parse(in_data[0]) * int.Parse(in_data[1]));

            // 문제 조건에서 정부 부분만 출력하는 것이기에 double이 아닌 int로 형변환을 한다
            Console.WriteLine(int.Parse(in_data[0]) / int.Parse(in_data[1]));
            Console.WriteLine(int.Parse(in_data[0]) % int.Parse(in_data[1]));
        }
    }
}

// 10869번 사칙연산
// https://www.acmicpc.net/problem/10869
반응형
반응형

 

1. 문제

    1789번 수들의 합 (https://www.acmicpc.net/problem/1789)

 

서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?

 

 

2. 문제 포인트

  • 중복되지 않는 자연수 개수 구하기

 

반응형

 

3. 접근법

  • S를 자연수로 하나씩 빼면서 총 개수를 구한다
  • 1, 2, 3... 숫자 하나씩을 S에서 빼면서 계산하다가 뺄 수(n)보다 S의  나머지가 작은 경우 반복문을 종료한다.
    ex. 15인 경우
           15 - 1 - 2 - 3 - 4 - 5  = 0  >> 5번
           17 - 1 - 2 - 3 - 4 - 7 = 0  >>  5번
             - 1~5까지 빼면 17은 2가 남게 됨
             - 1~4까지 빼고 7을 빼면 중복되지 않은 자연수들로 계산이 가능

 

4. 결과 코드

import sys

a = int(sys.stdin.readline().strip())

# 숫자 사용 횟수
cnt = 0
# 계산에 사용될 숫자
num = 1

while True:
    # 입력받은 숫자에서 1부터 하나씩 빼서 숫자 사용 횟수 계산
    a -= num
    cnt += 1
    num += 1

    # 1부터 1씩 증가한 num이 a의 나머지값보다 크면 숫자가 중복되어 사용되기에
    # num이 a보다 크게 되는 경우 루프 종료
    if num > a:
        break

print(cnt)

# 1789번 수들의 합
# https://www.acmicpc.net/problem/1789
반응형
반응형

 

1. 문제

    1439번 뒤집기 (https://www.acmicpc.net/problem/1439)

 

다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다.

예를 들어 S=0001100 일 때,

  1. 전체를 뒤집으면 1110011이 된다.
  2. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다.

하지만, 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면 한 번에 0000000이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다.

문자열 S가 주어졌을 때, 다솜이가 해야하는 행동의 최소 횟수를 출력하시오.

 

 

2. 문제 포인트

  • 0과 1로 이루어진 문자열 입력
  • 모두 같은 숫자로 만들기 (0, 1 무관)
  • 한번에 근접한 문자 같이 뒤집기 가능

 

반응형

 

3. 접근법

  • 모든 숫자를 0으로 만들때와 1로 만들때를 구한 후 작은 값 출력
  • 전체를 1을 만드는 뒤집기 횟수 ==  split("0")으로 리스트를 생성한 후 만든 요소의 개수
  • 전체를 0을 만드는 뒤집기 횟수 ==  split("1")으로 리스트를 생성한 후 만든 요소의 개수
  • min()으로 두가지 경우 중 작은 값 출력

 

 

4. 결과 코드

import sys

a = sys.stdin.readline().strip()

# 1, 0을 기준으로 문자열을 나눠 리스트 만들기
## list comprehension을 이용하여 내용없는 요소는 제거
b = [bb for bb in a.split("1") if bb]
c = [cc for cc in a.split("0") if cc]

print(min(len(b), len(c)))

# 1439번 뒤집기
# https://www.acmicpc.net/problem/1439
반응형
반응형

1. 문제

- 1008번 A / B (C#)  (https://www.acmicpc.net/problem/1008)

 

두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 두 정수 A, B 입력받기
  • A / B 출력하기
  • 오차 10의 -9제곱 이하 (double형 사용)

 

반응형

 

3. 전체 코드

using System;

namespace B5_AB
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 빈칸을 기준으로 두 값을 받아야 함으로 Split()을 이용하여 배열로 받음
            string[] in_str = Console.ReadLine().Split();

            // 위에서 받은 값이 문자열(string)이기에 double.Parse()로 계산 가능하게 바꿔준다
            // int.Parse()로 계산할 경우 결과값도 int가 되어 소수점이 짤리게된다
            // float.Parse()로 계산할 경우 자릿수 부족으로 인하여(float으 표현범위 부족) 10의 -9제곱이란 정확도를 맞출 수 없다
            Console.WriteLine(double.Parse(in_str[0]) / double.Parse(in_str[1]));
        }
    }
}
반응형
반응형

 

1. 문제

    문제번호 문제 타이틀 (https://www.acmicpc.net/problem/14916)

 

춘향이는 편의점 카운터에서 일한다.

손님이 2원짜리와 5원짜리로만 거스름돈을 달라고 한다. 2원짜리 동전과 5원짜리 동전은 무한정 많이 가지고 있다. 동전의 개수가 최소가 되도록 거슬러 주어야 한다. 거스름돈이 n인 경우, 최소 동전의 개수가 몇 개인지 알려주는 프로그램을 작성하시오.

예를 들어, 거스름돈이 15원이면 5원짜리 3개를, 거스름돈이 14원이면 5원짜리 2개와 2원짜리 2개로 총 4개를, 거스름돈이 13원이면 5원짜리 1개와 2원짜리 4개로 총 5개를 주어야 동전의 개수가 최소가 된다.

 

 

2. 문제 포인트

  • 동전은 2원, 5원만 있다
  • 동전의 최소 개수를 구한다

 

반응형

 

3. 접근법

  • 이전에 했던 거스름돈 문제와의 차이점
    - 이전문제 : https://hostramus.tistory.com/148
    - 동전이 5원과 2원 2가지다 (point. 5원은 2원의 배수가 아니다)
    - 13원인경우 5 * 1 + 2 * 4 = 13이다 (5원동전을 무조건 먼저 사용해선 안된다)
       ex 1. 13원 = 5 * 1 + 2 * 4  (잔액이 10보다 크지만 5원동전 2개 불가)
       ex 1. 21원 = 5 * 3 + 2 * 3  (잔액이 10보다 크지만 5원동전 4개 불가)
  • 2원의 개수를 0개부터 한개씩 늘려가면서 계산한다.

 

4. 결과 코드

import sys

a = int(sys.stdin.readline().strip())

cnt = 0

while a>0:
    # 입력받은 a값이 5의 배수면 5원짜리로 거슬러주는것이 가장 작은 동전수
    if a % 5 == 0:
        cnt += a // 5
        break
    # 5원짜리로 안될때 2원짜리를 한개씩 늘려가며 최소 개수를 찾기
    else:
        a -= 2
        cnt += 1
        if a < 0:
            cnt = -1

print(cnt)

# 14916번 거스름돈
# https://www.acmicpc.net/problem/14916
반응형

+ Recent posts