7번 주사위 세 개

문제

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈) ×1,000원의 상금을 받게 된다. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈) ×100원의 상금을 받게 된다. 모두 다른 눈이 나오는 경우에는 (그중 가장 큰 눈) ×100원의 상금을 받게 된다. 예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3 ×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2 ×1,000으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6 ×100으로 계산되어 600원을 상금으로 받게 된다. 3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성하시오.

 

입력

첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.

 

출력

첫째 줄에 게임의 상금을 출력한다.

 

입력받은 주사위 눈을 조건에 맞게 검사해서 상금을 출력하면 된다.

 

C++

#include <iostream>
#include <algorithm>
using namespace std;
int main(){
    int a, b, c;
    cin >> a;
    cin >> b;
    cin >> c;
    int reward;
    if (a == b && b == c){
        reward = 10000 + a * 1000;
    }
    else if (a == b || b == c || a == c){
        int val = a == b ? a : b == c ? b : c;
        reward =  1000 + val * 100;
    }
    else{
        int max_val = max({a, b, c});
        reward = max_val * 100;
    }
    cout << reward;
    return 0;
}

 

세 개의 값 중 가장 큰 값을 구할 때 <algorithm> 헤더의 std::max를 사용하여 간략하게 작성한다.

 

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]);
        int c = int.Parse(arr_input[2]);
        int reward;
        if (a == b && b == c){
            reward = 10000 + a * 1000;
        }
        else if (a == b || b == c || a == c){
            int val = a == b ? a : b == c ? b : c;
            reward = 1000 + val * 100;
        }
        else {
            int val = Math.Max(a, (Math.Max(b, c)));
            reward = 100 * val;
        }
        Console.WriteLine(reward);
    }
}

 

C#은 최댓값을 구하기 위해서 Math.Max를 중첩해서 사용했다.

 

다른 방법으로는 System.Linq의 Enumerable.Max를 사용할 수  있다.

using System.Linq;
~

	int [] nums = {a, b, c};
	int max_val = nums.Max();

~

 

두 방식을 비교해 보니 메모리면에서 전자의 방법이 더 나았다.

 

Python

inputData = input();
arrData = inputData.split(' ');
a = int(arrData[0]);
b = int(arrData[1]);
c = int(arrData[2]);
if a == b and b == c:
    reward = 10000 + a * 1000
elif a == b or b == c or a == c:
    val = a if a == b or a == c else b
    reward = 1000 + val * 100;
else:
    val = max(a, b, c)
    reward = 100 * val
print(reward)

 

파이썬에서 삼항 연산자는 if - else로 표현된다.

max 함수는 가장 큰 수를 반환한다.

 

Node.js

const readline = require('readline');
const rl = readline.createInterface({
    input : process.stdin,
    output : process.stdout
});

rl.question('', (answer)=>{
    const [a,b,c] = answer.split(' ').map(Number);
    let reward;
    if (a == b && b == c){
        reward = 10000 + a * 1000;
    }
    else if (a == b || b == c || a == c){
        let val = a == b ? a : b == c ? b : c;
        reward = 1000 + val * 100;
    }
    else{
        val = Math.max(a, b, c);
        reward = 100 * val;
    }
    console.log(reward);
    rl.close();
});

 

node.js는 Math.max로 세 값 중 가장 큰 값을 구할 수 있다.

728x90
반응형

3번 사분면 고르기

문제

흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제 n사분면"이라는 뜻이다.

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

 

예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다. 점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.

 

입력

첫 줄에는 정수 x가 주어진다. (−1000 ≤ x ≤ 1000; x ≠ 0) 다음 줄에는 정수 y가 주어진다. (−1000 ≤ y ≤ 1000; y ≠ 0)

 

출력

점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.

 

x 가 양수인지 음수인지, y가 양수인지 음수인지 구분해서 조건

 

C++

#include <iostream>
using namespace std;
int main(){
    int x, y;
    cin >> x;
    cin >> y;
    char result;
    if (x > 0)
    {
        if (y > 0)
            result = '1';
        else 
            result = '4';
    }
    else{
        if (y > 0)
            result = '2';
        else
            result = '3';
    }
    cout << result;
    return 0;
}

 

 

C#

using System;
class Program{
    static void Main(string[] args){
        string inputX = Console.ReadLine();
        string inputY = Console.ReadLine();
        int x = int.Parse(inputX);
        int y = int.Parse(inputY);
        char result;
        if (x > 0)
        {
            if (y > 0)
                result = '1';
            else 
                result = '4';
        }
        else{
            if (y > 0)
                result = '2';
            else
                result = '3';
        }
        Console.WriteLine(result);
    }
}

 

앞의 문제들과 다르게 각 줄에 값들이 들어온다. 따라서 입력을 따로 두 번 받아서 값을 저장한다.

 

Python

x = int(input());
y = int(input());
if x > 0:
    if y > 0:
        result = '1';
    else:
        result = '4';
else:
    if y > 0:
        result = '2';
    else:
        result = '3';
print(result);

 

파이썬에서 중첩 조건문을 쓸 때는 들여 쓰기로 구분한다.

 

Node.js

const readline = require('readline');
const rl = readline.createInterface({
    input : process.stdin,
    output : process.stdout
});
let x, y;
let result;
rl.question('', (answerX)=>{
    x = parseInt(answerX, 10);
    rl.question('', (answerY)=>{
    y = parseInt(answerY, 10);
        if (x > 0){
            if (y > 0)
                result = '1';
            else
                result = '4';
        }
        else{
            if (y > 0)
                result = '2';
            else
                result = '3';   
        }
        console.log(result);
        rl.close();
    });
});

 

각 각의 입력을 받고 처리한다.

rl.close()가 호출되면 입력된 값을 사용할 수 없기 때문에 호출 전에 결과를 출력해야 한다.

728x90
반응형

3번 윤년

문제

연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배수이고 400의 배수는 아니기 때문에 윤년이 아니다. 하지만, 2000년은 400의 배수이기 때문에 윤년이다.

 

입력

첫째 줄에 연도가 주어진다. 연도는 1보다 크거나 같고, 4000보다 작거나 같은 자연수이다.

 

출력

첫째 줄에 윤년이면 1, 아니면 0을 출력한다.

 

연도가 4의 배수 && (100의 배수가 아닐 때  || 400의 배수일 때)

 

C++

#include <iostream>
using namespace std;
int main(){
    int input;
    cin >> input;
    char result;
    if ((input % 4) == 0 && ((input % 100) != 0 || (input % 400) == 0))
        result = '1';
    else
        result = '0';
    cout << result;
    return 0;
}

 

배수인지 확인할 때는 나머지가 0인지를 확인하면 된다.

 

C#

using System;
class Program{
    static void Main(string[] args){
        int input = int.Parse(Console.ReadLine());
        char result;
        if ((input % 4) == 0 && ((input % 100) != 0 || (input % 400) == 0))
            result = '1';
        else
            result = '0';
        Console.WriteLine(result);
    }
}

 

Python

inputData = int(input());
if inputData % 4 == 0 and (inputData % 100 != 0 or inputData % 400 == 0):
    result = '1';
else:
    result = '0';
print(result);

 

파이썬의 논리 연산자는 and, or, not으로 작성한다.

 

Node.js

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim();
const year = parseInt(input, 10);
let result;
if ((input % 4) == 0 && ((input % 100) != 0 || (input % 400) == 0))
    result = '1';
else
    result = '0';
console.log(result);

 

728x90
반응형

2번 시험 성적

문제

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

 

입력

첫째 줄에 시험 점수가 주어진다. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

 

출력

시험 성적을 출력한다.

 

C++

#include <iostream>
using namespace std;
int main(){
    int score;
    cin >> score;
    char result;
    if (score >= 90) {
        result = 'A';
    }
    else if (score >= 80){
        result = 'B';
    }
    else if (score >= 70){
        result = 'C';
    }
    else if (score >= 60){
        result = 'D';
    }
    else {
        result = 'F';
    }
    cout << result;
    return 0;
}

 

C#

using System;
class Program{
    static void Main(string[] args){
        int score = int.Parse(Console.ReadLine());
        char result;
        if (score >= 90)
            result = 'A';
        else if (score >= 80)
            result = 'B';
        else if (score >= 70)
            result = 'C';
        else if (score >= 60)
            result = 'D';
        else
            result = 'F';
        Console.WriteLine(result);
    }
}

 

Python

score = int(input());
if score >= 90: 
    result = 'A'
elif score >= 80:
    result = 'B'
elif score >= 70:
    result = 'C'
elif score >= 60:
    result = 'D'
else:
    result = 'F'
print(result);

 

파이썬에서 조건문을 사용할 때는 들여 쓰기에 주의해야 한다.

 

Node.js

const fs = require('fs');
const inputData = fs.readFileSync('/dev/stdin').toString().trim();
const score = parseInt(inputData, 10);
let result;
if (score >= 90)
    result = 'A';
else if (score >= 80)
    result = 'B';
else if (score >= 70)
    result = 'C';
else if (score >= 60)
    result = 'D';
else 
    result = 'F';

console.log(result);

 

'fs' 모듈 사용해서 입력 처리

728x90
반응형

1번 두 수 비교하기

문제

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

 

입력

첫째 줄에 A와 B가 주어진다. A와 B는 공백 한 칸으로 구분되어 있다.

 

출력

첫째 줄에 다음 세 가지 중 하나를 출력한다. 

- A가 B보다 큰 경우에는 '>'를 출력한다. 

- A가 B보다 작은 경우에는 '<'를 출력한다. 

- A와 B가 같은 경우에는 '=='를 출력한다.

 

C++

#include <iostream>
#include <string>
using namespace std;
int main(){
    int a, b;
    cin >> a;
    cin >> b;
    string result = "";
    if (a > b)
        result = ">";
    else if (a < b)
        result = "<";
    else
        result = "==";
    cout << result;
    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]);
        if (a > b) input = ">";
        else if (a < b) input = "<";
        else input = "==";
        Console.WriteLine(input);
    }
}

 

Python

strInput = input()
arrInput = strInput.split(' ')
a = int(arrInput[0])
b = int(arrInput[1])
if a > b: 
    c = ">"
elif a < b: 
    c = "<"
else: 
    c = "=="
print(c);

 

파이썬의 경우 조건문 작성 시

if 조건 :

elif 조건 :

else :

 

방식으로 작성한다. 그리고 중요한 점은 파이썬의 변수의 범위는 함수 단위로 이루어지기 때문에 조건문 내부에서 선언된 c는 외부에서도 접근이 가능하다. 하지만 함수 내에서 변수를 선언했다면 외부에서 접근할 수 없다.

 

Node.js

const readline = require('readline');
const rl = readline.createInterface({
    input:process.stdin,
    output:process.stdout
});

rl.question('', (answer) =>{
    let input = answer;
    let arr = input.split(' ');
    let a = parseInt(arr[0], 10);
    let b = parseInt(arr[1], 10);
    let result;
    if (a > b) {
        result = ">";   
    }
    else if (a < b) {
        result = "<";    
    }
    else {
        result = "==";  
    } 
    process.stdout.write(result);
    rl.close();
});

 

node.js 에서 입력은 모듈을 사용하여 처리한다.

 

1. 'readline' 모듈을 사용하여 입력 인터페이스를 생성한다.

2. 'rl.question'을 사용하여 사용자로부터 숫자를 입력받는다.

 

더 축약한 코드

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.question('', (answer) => {
    const [a, b] = answer.split(' ').map(Number);
    const result = (a > b) ? '>' : (a < b) ? '<' : '==';
    process.stdout.write(result);
    rl.close();
});

 

map을 사용하여 입력된 값을 저장하고 삼항 연산자로 조건을 비교하여 코드를 단축시켰다.

 

728x90
반응형

조건문 (Conditional Statements)

조건문은 특정 조건에 따라 코드 블록을 실행하거나 건너뛰는 방식으로 동작한다.

 

if, else if, else 

let x = 10;

if (x > 5) {
    console.log("x는 5보다 크다.");
} else if (x === 5) {
    console.log("x는 5이다.");
} else {
    console.log("x는 5보다 작다.");
}

 

switch

하나의 변수를 다양한 값과 비교하여 코드 블록을 실행한다.

let day = 3;
let dayName;

switch (day) {
    case 0:
        dayName = 'Sunday';
        break;
    case 1:
        dayName = 'Monday';
        break;
    case 2:
        dayName = 'Tuesday';
        break;
    case 3:
        dayName = 'Wednesday';
        break;
    case 4:
        dayName = 'Thursday';
        break;
    case 5:
        dayName = 'Friday';
        break;
    case 6:
        dayName = 'Saturday';
        break;
    default:
        dayName = 'Invalid day';
}

console.log(dayName); // "Wednesday"

 

break는 해당 조건에 해당하면 더 이상 다음 조건을 확인하지 않고 조건문을 종료시키는 기능을 한다.

case는 순서대로 모든 케이스를 확인하기 때문에 break가 없다면 swich의 모든 조건을 확인한다.

반복문 (Loops)

반복문은 특정 코드 블록을 여러 번 실행하는 데 사용된다. 

 

for

일반적인 반복문이다.

for (let i = 0; i < 5; i++) {
    console.log(i); // 0, 1, 2, 3, 4
}

 

 

while

조건이 참인 동안 코드 블록을 반복한다.

let i = 0;
while (i < 5) {
    console.log(i); // 0, 1, 2, 3, 4
    i++;
}

 

do-while

코드 블록을 최소 한 번 실행하고, 그 후 조건이 참인 동안 반복한다.

let i = 0;
do {
    console.log(i); // 0, 1, 2, 3, 4
    i++;
} while (i < 5);

 

break

break는 반복문을 종료시키는 기능을 한다.

for (let i = 0; i < 10; i++) {
    if (i === 5) {
        break;
    }
    console.log(i); // 0, 1, 2, 3, 4
}

 

continue

continue 문은 현재 반복을 종료하고 다음 반복으로 넘어간다.

for (let i = 0; i < 10; i++) {
    if (i === 5) {
        continue;
    }
    console.log(i); // 0, 1, 2, 3, 4, 6, 7, 8, 9
}

 

728x90
반응형

'Program Language > JavaScript' 카테고리의 다른 글

JavaScript #13 DOM(Document Object Model)  (0) 2024.07.23
JavaScript #11 함수  (0) 2024.07.23
JavaScript #9 데이터 타입  (9) 2024.07.22
JavaScript #8 클로저(Closure)  (0) 2024.07.22
JavaScript #7 var 변수에 대해서  (0) 2024.07.22

+ Recent posts