반응형

1. 문제

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

 

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

 

 

2. 문제 포인트

  • 두 정수 A, B 입력 받기
  • A x B 계산값 출력

 

반응형

 

 

3. 전체 코드

using System;

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

            // 위에서 받은 값이 문자열(string)이기에 int.Parse()로 계산 가능하게 바꿔준다
            Console.WriteLine(int.Parse(in_str[0]) * int.Parse(in_str[1]));
        }
    }
}

 

 

 

반응형
반응형

1. 문제

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

 

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

 

 

2. 문제 포인트

  • 두 정수 입력 받기 (A, B)
  • A - B 계산하여 출력

 

 

반응형

 

3. 전체 코드

using System;

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

            // 위에서 받은 값이 문자열(string)이기에 int.Parse()로 계산 가능하게 바꿔준다
            Console.WriteLine(int.Parse(in_str[0]) - int.Parse(in_str[1]));
        }
    }
}

 

 

 

반응형
반응형

1. 문제

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

 

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

 

 

2. 문제 포인트

  • 두 정수 입력 받기 (Console.ReadLine())
  • 두 정수 더하여 출력하기

 

 

반응형

 

3. 전체 코드

using System;

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

            // 위에서 받은 값이 문자열(string)이기에 int.Parse()로 계산 가능하게 바꿔준다
            Console.WriteLine(int.Parse(in_str[0]) + int.Parse(in_str[1]));
        }
    }
}

 

 

 

반응형
반응형

1. 문제

- 10718번 We love kriii (C#)

 

ACM-ICPC 인터넷 예선, Regional, 그리고 World Finals까지 이미 2회씩 진출해버린 kriii는 미련을 버리지 못하고 왠지 모르게 올해에도 파주 World Finals 준비 캠프에 참여했다.

대회를 뜰 줄 모르는 지박령 kriii를 위해서 격려의 문구를 출력해주자.

 

두 줄에 걸쳐 "강한친구 대한육군"을 한 줄에 한 번씩 출력한다.

 

2. 문제 포인트

  • 콘솔창에 "강한친구 대한육군"을 두줄에 걸쳐 두번 출력

 

 

반응형

 

3. 전체 코드

using System;

namespace B5_WeLoveKriii
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 콘솔창에 "강한친구 대한육군" 출력
            Console.WriteLine("강한친구 대한육군");
            Console.WriteLine("강한친구 대한육군");
        }
    }
}

 

 

 

반응형
반응형

1. 문제

  2557번 Hello World!  (https://www.acmicpc.net/problem/2557)

 

Hello World!를 출력하시오.

 

 

2. 문제 포인트

  • 콘솔창에 "Hello World!" 출력

 

 

반응형

 

3. 전체 코드

using System;

namespace B5_HelloWorld
{
    internal class Program
    {
        static void Main(string[] args)
        {
        	// 콘솔창에 텍스트 출력
            Console.WriteLine("Hello World!");
        }
    }
}

 

 

 

반응형
반응형

 

1. 문제

    17224번 APC는 왜 서브태스크 대회가 되었을까?  (https://www.acmicpc.net/problem/17224)

 

2019년 올해도 어김없이 아주대학교 프로그래밍 경시대회(Ajou Programming Contest, APC)가 열렸다! 올해 새롭게 APC의 총감독을 맡게 된 준표는 대회 출제 과정 중 큰 고민에 빠졌다. APC에 참가하는 참가자들이 너무 다양해 대회 문제 난이도 설정이 너무 어렵기 때문이다.

APC는 프로그래밍 대회에 익숙하지 않은 학생들과 전공생이 아닌 학생들도 대거 참가하기 때문에 모두가 풀거나 도전할 수 있는 난이도 커브를 갖춰야 한다. 또한 '경인지역 6개대학 연합 프로그래밍 경시대회 shake!'에 참가할 학교 대표 10인을 선발하기 위한 대표 선발전으로서의 변별력도 갖추어야 하며, 외부인들이 따로 참가할 수 있는 Open Contest가 동시에 진행되기 때문에 소위 '고인물'들에게 한 시간도 안되어 대회가 정복당하는 일도 막고 싶다. 여기에 APC 출제진인 준표, 만영, 현정, 준서는 문제를 준비하는 데 무척 고생을 했기 때문에 참가자들이 모든 문제를 한번씩은 읽어주었으면 하는 소망도 가지고 있다.

욕심 그득한 준표는 고민끝에 이 수많은 니즈를 충족시키기 위한 한가지 해결책을 제안했다. 하나의 문제를 제한조건을 통해 쉬운 버전과 어려운 버전으로 나누어 쉬운 버전만 맞더라도 부분점수를 주는 서브태스크 문제로 대회를 구성하는 것이다. 또한 이렇게 만들어진 문제를 쉬운 버전의 난이도순으로 배치하려 한다.

위와 같이 문제를 준비하면 프로그래밍 대회에 익숙하지 않은 사람은 앞에서부터 따라가면서 도전해볼 수 있어 쉬운 문제를 찾는 데 시간을 쓰지 않을 수 있고, 어려운 버전으로 학교 대표 선발을 위한 변별력을 유지할 수 있으며, 모든 문제가 읽히길 바라는 출제진의 소망도 이룰 수 있을 것이다!

<그림1> 출제중 평가한 문제들의 난이도 예시 (예제2)

<!-- 아래 이야기는 팩션입니다. -->

현정이는 APC에 한 번이라도 나가보고 싶다는 소망이 있다. 하지만 이 소망은 여태까지 단 한 번도, 그리고 앞으로도 이루어질 리 없기 때문에 현정이가 입버릇처럼 하게 된 말이 있는데...

  • 현정 : 아~~ 나도 APC 참가만 했으면 상금 받는 건데~~~~~
  • 준표 : ... 그건 아닌 것 같은데?

현정이의 근거 없는 자신감이 눈꼴신 준표는 출제 중에 평가한 문제 난이도를 통해 현정이의 예상 점수를 알려주고 현정이가 현실을 받아들일 수 있도록 도와주고자 한다.

현정이는 L 만큼의 역량을 가지고 있어 L보다 작거나 같은 난이도의 문제를 풀 수 있다. 또한 현정이는 코딩이 느리기 때문에 대회 시간이 부족해 K개보다 많은 문제는 해결할 수 없다. 어떤 문제에 대해 쉬운 버전을 해결한다면 100점을 얻고, 어려운 버전을 해결한다면 여기에 40점을 더 받아 140점을 얻게 된다. 어려운 버전을 해결하면 쉬운 버전도 같이 풀리게 되므로, 한 문제를 해결한 것으로 계산한다.

현정이가 APC에 참가했다면 최대 몇점을 얻을 수 있었을지 알려주자.

 

 

2. 문제 포인트

  • 1행에 "문제 개수, 역량, 풀이 가능한 문제 수" 를 입력 받음
  • 2행부터는 쉬운버전 난이도 + 어려운 버전 난이도를 입력 받음
  • 현정이가 받을 수 있는 최고 점수를 계산

 

반응형

 

3. 접근법

  • 어려운 난이도까지 풀 수있는 문제(140점 짜리)를 먼저 푼다
    - 어려운문제까지 풀어도 문제 풀이 시간은 1로 계산된다
    - 다시말해 입력을 받을때마다 점수를 계산하면 최대값을 얻을 수 없다
  • ex. 풀수 있는 문제 수(K) < 풀 수 있는 140점 문제 수
          - 위와 같은 경우 140 * K점수가 최대 점수가 된다

 

4. 결과 코드

import sys

a = list(map(int, sys.stdin.readline().split()))
sub = 0
basic = 0

# 문제수(a[0])만큼 반복
for _ in range(a[0]):
    b = list(map(int, sys.stdin.readline().split()))

    # 전체 문제 중 어려운버전까지 풀 수 있는 문제 수 계산
    # 최종 합계에 점수를 더해버리면 안된다.
    if a[1] >= b[1]:
        sub += 1
    # 전체 문제 중 쉬운 버전만 풀 수 있는 문제 수 계산
    elif a[1] >= b[0]:
        basic += 1

# 어려운 문제를 푼 수를 점수로 환산
# '풀 수 있는 문제 수' vs '풀이 가능한 총 문제 수'중 작은 값 선택
## ex. 3문제 풀이 가능 시간, 5개의 어려운 문제 풀이 가능 능력인 경우 어려운 문제 3개만 풀이가 가능(시간 제한)
score = 140 * min(sub, a[2])

# 위에서 어려운 문제를 다 푼뒤 더 풀 시간이 있는 경우 쉬운 문제 풀이
## 풀이 가능 숫자 * 100점을 계산
if a[2] - sub > 0:
    score += 100 * min(basic, (a[2] - sub))

print(score)


# https://www.acmicpc.net/problem/17224
반응형
반응형

 

1. 문제

    5585번 거스름돈 (https://www.acmicpc.net/problem/5585)

    

타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사고 카운터에서 1000엔 지폐를 한장 냈을 때, 받을 잔돈에 포함된 잔돈의 개수를 구하는 프로그램을 작성하시오.

 

 

2. 문제 포인트

  • 거스름돈 종류 (500엔, 100엔, 50엔, 10엔, 5엔, 1엔)
  • 잔돈 개수의 최소값

 

반응형

 

3. 접근법

  • 큰 금액 동전을 최대한 많이 사용하면 되는 문제
  • 1엔짜리까지 있기에 단순하게 계산 가능
      (1엔짜리가 없을 경우 잔돈의 1의 자리가 5나 0으로 끝나지 않으면 계산 불가)

 

4. 결과 코드

import sys

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

# 잔돈 금액 계산
chg = 1000 - a

# 동전 단위 리스트 (큰 동전부터 내림차순)
coin = [500, 100, 50, 10, 5, 1]

# 동전 개수
coin_cnt = 0

# coin에 들어있는 동전 단위별로 반복
for n in coin:
    
    # n값으로 나눠지면 계산
    if chg // n > 0:
        # 코인 개수 추가
        coin_cnt += chg // n
        # 현재 단위 제외 후나머지 잔액 계산
        chg -= n * (chg // n)

# 결과값 출력
print(coin_cnt)

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

1. 문제

    2810번 컵홀더

    (https://www.acmicpc.net/problem/2810)

 

십년이면 강산이 변한다.

강산이네 동네에 드디어 극장이 생겼고, 강산이는 극장에 놀러갔다. 매점에서 콜라를 산 뒤, 자리에 앉은 강산이는 큰 혼란에 빠졌다. 양쪽 컵홀더를 이미 옆 사람들이 차지했기 때문에 콜라를 꽂을 컵 홀더가 없었기 때문이다. 영화를 보는 내내 콜라를 손에 들고 있던 강산이는 극장에 다시 왔을 때는 꼭 콜라를 컵 홀더에 놓겠다는 다짐을 한 후 집에 돌아갔다.

극장의 한 줄에는 자리가 N개가 있다. 서로 인접한 좌석 사이에는 컵홀더가 하나씩 있고, 양 끝 좌석에는 컵홀더가 하나씩 더 있다. 또, 이 극장에는 커플석이 있다. 커플석 사이에는 컵홀더가 없다.

극장의 한 줄의 정보가 주어진다. 이때, 이 줄에 사람들이 모두 앉았을 때, 컵홀더에 컵을 꽂을 수 있는 최대 사람의 수를 구하는 프로그램을 작성하시오. 모든 사람은 컵을 한 개만 들고 있고, 자신의 좌석의 양 옆에 있는 컵홀더에만 컵을 꽂을 수 있다.

S는 일반 좌석, L은 커플석을 의미하며, L은 항상 두개씩 쌍으로 주어진다.

어떤 좌석의 배치가 SLLLLSSLL일때, 컵홀더를 *로 표시하면 아래와 같다.

*S*LL*LL*S*S*LL*

위의 예에서 적어도 두 명은 컵홀더를 사용할 수 없다.

 

 

2. 문제 포인트

  • 좌석 종류 2가지 (S석(일반석) L석(커플석))
  • 컵홀더는 좌석 사이와 양단 끝에 위치
  • 최대 컵홀더 사용 가능 인원 수 구하기

 

반응형

 

3. 접근법

  • S는 한글자지만 L은 LL두 글자로 표시됨
  • 방법 2가지
    • L이 두번 반복되는것을 확인 후 L두번당 한번씩 컵 홀더 위치 시키기
    • LL을 다른 문자 (ex. C)로 치환하여 풀이

 

4. 결과 코드_1 (LL의 반복을 확인하여 컵홀더 위치시키기)

import sys

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

# 시작점 컵홀더 하나 추가
result = "*"

# 각 자리별 컵홀더 자리 *로 표시
## L이 두번 나오는지 검출하는 방법
for n in b:
    # "S"가 나오면 바로 옆에 컵홀더 위치
    if n == "S":
        result += n + "*"

    # 커플석인 L이 나오면 두번 중복되어 나왔는지 확인하여 *추가
    if n == "L":
        if result[-1] == "L":
            result += "L" + "*"
        else:
            result += "L"

# 결과값 출력
## 일반 좌석만 존재하는 경우 컵홀더 숫자가 좌석수(사람수)보다 1개 많아지는 예외 발생
## min으로 컵홀더 사용 개수가 사람수를 넘어가지 않도록 처리
print(min(result.count("*"), a))


# https://www.acmicpc.net/problem/2810

 

4. 결과 코드_2 (LL 치환을 이용)

import sys

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

# LL(커플석)을 하나의 문자로 치환
b = b.replace("LL", "C")

# 컵홀더 수와 사람수를 비교하여 적은 수 출력
print(min(len(b)+1, a))


# https://www.acmicpc.net/problem/2810
반응형

+ Recent posts