11번 "꼬마 정민"

문제

꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!

 

입력

첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 10^12)이 공백을 사이에 두고 주어진다.

 

출력

A+B+C의 값을 출력한다.

 

C++

#include <iostream>
using namespace std;
int main(){
    long long a,b,c;
    cin >> a;
    cin >> b;
    cin >> c;
    cout << a+b+c;
    return 0;
}

 

int 타입은 최대 - 2^31 ~ 2^31−1까지의 정수를 저장할 수 있는데 입력받을 수 있는 수의 범위는 10^12이므로 이를 저장할 수 있는 long long 타입을 사용한다. (long long은 -2^63 ~ 2^63 −1까지)

 

C#

using System;
class Program{
    static void Main(string[] args){
        string str = Console.ReadLine();
        string[] arr = str.Split(" ");
        long a = long.Parse(arr[0]);
        long b = long.Parse(arr[1]);
        long c = long.Parse(arr[2]);
        Console.WriteLine(a+b+c);
    }
}

 

C#의 int 범위는 - 2^31  ~ 2^31-1, long 범위는 -2^31 ~ 2^31-1이다

 

Python

str = input()
arr = str.split(' ')
a = int(arr[0])
b = int(arr[1])
c = int(arr[2])
print(a+b+c)

 

파이썬의 경우 int는 임의 정밀도로 정해진 범위가 없고 사용할 수 있는 만큼 값을 가질 수 있다.

 

12번 "고양이"

\, ' 등의 문자에 주의하며 고양이를 출력하는 문제

 

문제

아래 예제와 같이 고양이를 출력하시오.

 

입력

없음.

 

출력
고양이를 출력한다.

\    /\
 )  ( ')
(  /  )
 \(__)|

 

예제의 고양이와 동일하게 출력을 하면 되는 문제이다.

 

C++

#include <iostream>
using namespace std;
int main(){
    cout << "\\    /\\" << endl;
    cout << " )  ( \')" << endl;
    cout << "(  /  ) " << endl;
    cout << " \\(__)|" << endl;
    return 0;
}

 

백슬래시(\), 작은따옴표('), 큰 따옴표(") 등의 문자는 문자열 내에서 별도의 기능을 가질 수 있는 문자들은 문자 자체로 사용하기 위해서는 앞에 백슬래시를 추가해서 이스케이프 시퀀스를 사용해야 한다.

 

C#

using System;
class Program{
    static void Main(string[] args){
        Console.WriteLine("\\    /\\");
        Console.WriteLine(" )  ( \')");
        Console.WriteLine("(  /  )");
        Console.WriteLine(" \\(__)|");
    }
}

 

C#도 동일하게 이스케이프 시퀀스를 사용해서 표현한다.

 

Python

print("\\    /\\")
print(" )  ( \')")
print("(  /  )")
print(" \\(__)|")

 

이스케이프 시퀀스는 여러 프로그래밍 언어에서 비슷한 목적을 가지고 사용되지만, 모든 언어에서 동일하게 사용되지는 않는다. 대부분의 경우 C 언어에서 유래한 이스케이프 표준을 따르면서 각 언어마다 고유한 확장이나 차이를 가지고 있다.

 

13번 개

", `, \ 등의 문자에 주의하며 개를 출력하는 문제

 

문제

아래 예제와 같이 개를 출력하시오.

 

입력

없음.

 

출력

개를 출력한다.

|\_/|
|q p|   /}
( 0 )"""\
|"^"`    |
||_/=\\__|

 

C++

#include <iostream>
using namespace std;
int main(){
    cout << "|\\_/|" << endl;
    cout << "|q p|   /}" << endl;
    cout << "( 0 )\"\"\"\\" << endl;
    cout << "|\"^\"`    |" << endl;
    cout << "||_/=\\\\__|" << endl;
    return 0;
}

 

 

C#

using System;
class Program{
    static void Main(string[] args){
        Console.WriteLine("|\\_/|");
        Console.WriteLine("|q p|   /}");
        Console.WriteLine("( 0 )\"\"\"\\");
        Console.WriteLine("|\"^\"`    |");
        Console.WriteLine("||_/=\\\\__|");
    }
}

 

Python

print("|\\_/|");
print("|q p|   /}");
print("( 0 )\"\"\"\\");
print("|\"^\"`    |");
print("||_/=\\\\__|");
728x90
반응형

8번 "1998년생인 내가 태국에서는 2541년생?!"

식을 직접 세워서 계산하는 문제

 

문제

ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다. 불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.

 

입력

서기 연도를 알아보고 싶은 불기 연도 y가 주어진다. (1000 ≤ y ≤ 3000)

 

출력

불기 연도를 서기 연도로 변환한 결과를 출력한다.

 

문제를 풀기 위해서는 불기와 서기의 차이에 대한 정보가 필요한데 제목에 힌트가 있다. 두 값의 차인 543의 값을 사용해서 불기를 서기로 표시할 수 있다.

 

"불기 - 543 = 서기"

 

C++

#include <iostream>
using namespace std;
int main(){
    int input;
    cin >> input;
    cout << input - 543;
}

 

C#

using System;
class Program{
    static void Main(string[] args){
        string input = Console.ReadLine();
        int val = int.Parse(input);
        Console.WriteLine(val - 543);
    }
}

 

Python

str = input()
val = int(str)
print(val - 543)

 

C#과 Python의 경우에는 입력은 문자열로만 반환되기 때문에 이를 정수계산하기 위해서는 타입 변환의 과정이 필요하다.

 

9번 "나머지"

문제

(A+B)%C는 ((A%C) + (B%C))%C 와 같을까? (A×B)%C는 ((A%C) × (B%C))%C 와 같을까? 세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)

 

출력

첫째 줄에 (A+B)%C, 둘째 줄에 ((A%C) + (B%C))%C, 셋째 줄에 (A×B)%C, 넷째 줄에 ((A%C) × (B%C))%C를 출력한다.

 

C++

#include <iostream>
using namespace std;
int main(){
    int a, b, c;
    cin >> a;
    cin >> b;
    cin >> c;
    cout << (a+b)%c << endl;
    cout << ((a%c)+(b%c))%c << endl;
    cout << (a*b)%c << endl;
    cout << ((a%c)*(b%c))%c << endl;
    return 0;
}

 

C#

using System;
class Program{
    static void Main(string[] args){
        string input = Console.ReadLine();
        string[] arr = input.Split(" ");
        int a = int.Parse(arr[0]);
        int b = int.Parse(arr[1]);
        int c = int.Parse(arr[2]);
        
        Console.WriteLine((a+b)%c);
        Console.WriteLine(((a%c)+(b%c))%c);
        Console.WriteLine((a*b)%c);
        Console.WriteLine(((a%c)*(b%c))%c);
    }
}

 

Python

str = input();
arr = str.split(" ");
a = int(arr[0]);
b = int(arr[1]);
c = int(arr[2]);
print((a+b)%c);
print(((a%c)+(b%c))%c);
print((a*b)%c);
print(((a%c)*(b%c))%c);

 

이 문제는 받아쓰기만 틀리지 않고 잘하면 어려움이 없는 문제였다.

 

10번 "곱셈"

문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

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

 

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세 자리 자연수가 주어진다.

 

출력

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

 

우선 입력받은 두 값을 곱셈하여 저장해 놓고 첫 번째 입력받은 값을 기준으로 하고 두 번째 입력값을 자릿수별로 잘라서 변수에 저장한다. 그리고 각 자릿수마다 기준 값과 곱한 값을 출력하고 처음 계산한 곱셈을 출력하면 될듯하다.

 

C++

#include <iostream>
#include <string>
using namespace std;
int main(){
    int val1;
    int val2;
    cin >> val1;
    cin >> val2;
    int result4 = val1*val2;
    
    string str = to_string(val2);
    int a = str[2] - '0';
    int b = str[1] - '0';
    int c = str[0] - '0';
    
    int result1 = val1*a;
    int result2 = val1*b;
    int result3 = val1*c;
    
    cout << result1 << endl;
    cout << result2 << endl;
    cout << result3 << endl;
    cout << result4 << endl;
    
    return 0;
}

 

C#

using System;
class Program{
    static void Main(string[] args){
        string str_1 = Console.ReadLine();
        string str_2 = Console.ReadLine();
        
        int val_1 = int.Parse(str_1);
        int val_2 = int.Parse(str_2);
        int a = (int)char.GetNumericValue(str_2[2]);
        int b = (int)char.GetNumericValue(str_2[1]);
        int c = (int)char.GetNumericValue(str_2[0]);
        
        int result_1 = val_1 * a;
        int result_2 = val_1 * b;
        int result_3 = val_1 * c;
        int result_4 = val_1 * val_2;
        
        Console.WriteLine(result_1);
        Console.WriteLine(result_2);
        Console.WriteLine(result_3);
        Console.WriteLine(result_4);
    }
}

 

C#에서 단일 문자의 경우 int.Parse는 에러가 발생한다. 따라서 문자를 정수로 전환하기 위해서 char.GetNumericValue를 사용한다. 

 

또는 문자가 숫자일 경우에는 아스키코드를 활용해서 정수로 변환할 수 있다.

아스키코드에서 '0' 문자는 48이다. 그리고 그 뒤로 연속으로 값이 증가하는데 즉 '1' - '0' = 49 - 48 이므로 결과는 1로 정수 값을 구할 수 있게 된다.

 

int a = (int)char.GetNumericValue(str_2[2]);
int b = (int)char.GetNumericValue(str_2[1]);
int c = (int)char.GetNumericValue(str_2[0]);

// ASCII
int a = str_2[2] - '0';
int b = str_2[1] - '0';
int c = str_2[0] - '0';

 

Python

str_1 = input()
str_2 = input()
val_1 = int(str_1)
val_2 = int(str_2)
a = int(str_2[2])
b = int(str_2[1])
c = int(str_2[0])
result_1 = val_1 * a
result_2 = val_1 * b
result_3 = val_1 * c
result_4 = val_1 * val_2
print(result_1)
print(result_2)
print(result_3)
print(result_4)
728x90
반응형

7번 사칙연산 응용

문제

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

 

입력

첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.

 

출력

첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.

 

문제를 정리하면 채점시 이미 존재하는 아이디가 입력되고, 입력한 값 뒤에 ??! 를 붙여서 출력하면 된다.

 

C++

#include <iostream>
#include <string>
using namespace std;
int main(){
    string id;
    cin >> id;
    cout << id+"??!";
    return 0;
}

 

입력받은 문자열 뒤에 "??!"를 붙여서 출력한다.

 

C#

using System;
class Program{
    static void Main(string[] args){
        string id = Console.ReadLine();
        Console.WriteLine(id+"??!");
    }
}


Python

id = input();
print(id+"??!")

 

728x90
반응형

6번

문제

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

 

입력

두 자연수 A와 B가 주어진다. (1 ≤ A, B ≤ 10,000)

 

출력

첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A*B, 넷째 줄에 A/B, 다섯째 줄에 A%B를 출력한다.

 

C++

#include <iostream>
using namespace std;
int main(){
    int a,b;
    cin >> a;
    cin >> b;
    cout << a+b << endl;
    cout << a-b << endl;
    cout << a*b << endl;
    cout << a/b << endl;
    cout << a%b << endl;
    
    return 0;
}

 

줄바꾸기 endl 사용

 

C#

using System;
class Program{
    static void Main(string[] args){
        string input = Console.ReadLine();
        string[] arr_input = input.Split(' ');
        int a = int.Parse(arr_input[0]);
        int b = int.Parse(arr_input[1]);
        Console.WriteLine(a+b);
        Console.WriteLine(a-b);
        Console.WriteLine(a*b);
        Console.WriteLine(a/b);
        Console.WriteLine(a%b);
    }
}

 

ReadLine으로 입력을 한 줄로 받고 string.Split을 사용해서 공백으로 두 값을 구분하여 사용한다.

 

Python

str = input()
arr = str.split(' ')
a = int(arr[0])
b = int(arr[1])
print(a+b, a-b, a*b, a//b, a%b, sep='\n')

 

파이썬의 경우 '/' , '//' 연산자가 존재한다.

앞의 두 언어들은 연산하는 두 값이 모두 int 타입이기 때문에 / 연산자를 사용하여 계산하게 되면 결과도 정수형으로 반환되기 때문에 소수점은 버려지게 된다. 하지만 파이썬의 경우 정수형간의 나눗셈은 float으로 반환하기 때문에 문제에서 몫만을 출력해야 하고 이를 위해서는 몫을 구하는 연산자 '//'를 사용해야 한다.

 

728x90
반응형

+ Recent posts