no image
[백준/2588번] 곱셈
매우 간단!! 문제 (세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다. (1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다. 출력 첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다. 예제 입력 출력 472 385 2360 3776 1416 181720 문제풀이(JAVA) import java.util.Scanner; public class Main{ public static void main(String args[]){ Scanner s..
2022.05.01
no image
[프로그래머스] 문자열을 정수로 바꾸기
문제 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한사항 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져있습니다. s는 "0"으로 시작하지 않습니다. 예제 문제풀이(JS) function solution(s) { let answer = 0; answer = Number(s) return answer; } 더보기 - Javascript 문자를 숫자로 바꾸는 함수 let num = Number(s);
2022.04.28
no image
[백준/코딩테스트/10809번] 알파벳 찾기
문제 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성한다. 입력 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다. 출력 각각의 알파벳에 대해서 a가 처음 등장하는 위치, b가 처음 등장하는 위치, z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다. 예제 문제풀이(JAVA) import java.util.Scanner; public class Main { public st..
2022.03.31
no image
[프로그래머스] 약수의 개수와 덧셈 문제풀이
문제 두 정수 left와 right가 매개변수로 주어진다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성한다. 제한 조건 1 ≤ left ≤ right ≤ 1,000 문제풀이(C언어) #include #include #include int solution(int left, int right) { int answer = 0; int cnt; // 수들의 약수의 갯수를 count하는 변수 for(int i = left; i
2022.03.29
no image
[프로그래머스] x만큼 간격이 있는 n개의 숫자 문제풀이
문제 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴 제한 조건 x는 -10000000 이상, 10000000 이하인 정수 n은 1000 이하인 자연수 문제풀이(JAVA) class Solution { public long[] solution(int x, int n) { long[] answer = new long[n]; answer[0]=0;// 배열 초기화 long x1 = x; // ** for(int i =0; i < n; i++){ // for문(반복문)을 n번 돌린다 answer[i] = x1*(i+1);// answer배열에 x와 i+1을 곱하여 순서대로 넣는다 } return answer; } } 1. 반복문을 n번 ..
2022.03.21

[백준/2588번] 곱셈

냥치기소녀
|2022. 5. 1. 17:43

매우 간단!!

 

문제


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



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

 

입력

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

출력

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

 

예제

입력 출력
472
385
2360
3776
1416
181720

 

문제풀이(JAVA)

import java.util.Scanner;

public class Main{
    public static void main(String args[]){
         Scanner sc = new Scanner(System.in);
	        
	     int num1 = sc.nextInt();
	     int num2 = sc.nextInt();
	       
	     int output[] = new int[4];
	      
	     output[0] = num1 * (num2%10);
	     output[1] = num1 * (num2%100/10);
	     output[2] = num1 * (num2/100);
	     output[3] = num1 * num2;
	        
	     for(int i =0; i < 4; i++){
	         System.out.println(output[i]);
	     }
	       
	     sc.close();
    }
}

 

< 추가 설명 (예제) >

1) 첫 번째 출력 : num1 * (num2%10); 

 - (3)에 들어갈 값은 472 x 5의 연산 결과이다. 즉, 첫 번째 입력값과 두 번째 입력값의 일의 자리 수를 곱하는 것       이다. 따라서 일의 자리를 구하는 연산인 (두 번째 입력값%10)을 첫 번째 입력값에 곱해주었다.

 => 385%10 = 5

 

2) 두 번째 출력 : num1 * (num2%100/10); 

 - (4)에 들어갈 값은 472 x 8의 연산 결과이다. 즉, 첫 번째 입력값과 두 번째 입력값의 십의 자리 수를 곱하는 것       이다. 따라서 십의 자리를 구하는 연산인 (두 번째 입력값%100/10)을 첫 번째 입력값에 곱해주었다.

 => 385%100 = 85, 85/10 = 8

 

3) 세 번째 출력 : num1 * (num2/100); 

 - (5)에 들어갈 값은 472 x 3의 연산 결과이다. 즉, 첫 번째 입력값과 두 번째 입력값의 백의 자리 수를 곱하는 것       이다. 따라서 백의 자리를 구하는 연산인 (두 번째 입력값/100)을 첫 번째 입력값에 곱해주었다.

 => 385/100 = 3

 

4) 네 번째 출력 : num1 * num2;

 - (6)에 들어갈 값은 472 x 385의 연산 결과이다. 

문제

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

 

제한사항

s의 길이는 1 이상 5이하입니다.
s의 맨앞에는 부호(+, -)가 올 수 있습니다.
s는 부호와 숫자로만 이루어져있습니다.
s는 "0"으로 시작하지 않습니다.

 

 

예제

 

 

문제풀이(JS)

function solution(s) {
    let answer = 0;
    answer = Number(s)
    return answer;
}

 

더보기

 

< 추가 설명 >

- Javascript 문자를 숫자로 바꾸는 함수

let num = Number(s);

 

 

문제

알파벳 소문자로만 이루어진 단어 S가 주어진다.

각각의 알파벳에 대해서,
단어에 포함되어 있는 경우에는 처음 등장하는 위치를,
포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성한다.

 

 

입력

첫째 줄에 단어 S가 주어진다.
단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

 

출력

각각의 알파벳에 대해서
a가 처음 등장하는 위치, b가 처음 등장하는 위치,
z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다.
단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

 

 

예제

 

 

문제풀이(JAVA)

import java.util.Scanner;

public class Main {
    public static void main(String args[]){
	 Scanner sc = new Scanner(System.in);
     
     String s = sc.next();
     int alpha[] = new int[26]; // 비교할 알파벳 배열
     int print[] = new int[26]; // 출력할 배열
     
     for(int i = 0; i < 26; i++){
         alpha[i] = i+97; // 1-1 알파벳 초기화 
         print[i] = -1;   // 2-1 -1로 초기화
     }
     
     for(int i =0; i < s.length(); i++){
         for(int j = 0; j < 26; j++){
             if((char)alpha[j] == s.charAt(i)){ // 1-2
                if(print[j] == -1) { // 2-2
                	print[j] = i;	
                }
                // System.out.println((char)alpha[j] + " : " + j); // 결과확인 도와주는 출력문
                 break;
             }
         }
     }
     
     for(int i = 0; i < 26; i++) {
    	 System.out.print(print[i] + " ");
     }
    }
}
더보기

< 추가 설명 >

 

1-1 alpha[i] = i+97;

아스키코드로 int형 배열인 alpha에 넣는다. ( 소문자 a의 아스키코드 : 97 )

ex) i가 0일 때, i+97 = 97(=a) / i가 1일 때, i+97 = 98(=b)...

 

1-2  if((char)alpha[j] == s.charAt(i)){ 

입력받은 문자열과 알파벳을 비교할 때, 강제형변환을 사용하여 int형으로 되어 있는 아스키 코드를 char형으로 바꿔 비교한다.

 ex) alpha[j]가 97일 때, (char)alpha[j]는 a로 생각하여 비교한다.

 

2-1 print[i] = -1;

알파벳이 포함되어 있지 않은 경우 -1을 출력하라고 하였음으로 -1로 모두 초기화 해준다.

 

2-2 if(print[j] == -1) 

만약 -1이 아닌 다른 수가 있다면 그 수를 넣지 않고 넘어가기 위한 조건문이다.

예제를 보면 중복되는 문자는 처음나온 위치만 넣어주었다.

문제

두 정수 left와 right가 매개변수로 주어진다. 

left부터 right까지의 모든 수들 중에서, 

약수의 개수가 짝수인 수는 더하고

약수의 개수가 홀수인 수는 뺀 수를 

return 하도록 solution 함수를 완성한다.

 

제한 조건

1 ≤ left ≤ right ≤ 1,000

 

 

문제풀이(C언어)

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int left, int right) {
    int answer = 0;
    int cnt; 					// 수들의 약수의 갯수를 count하는 변수
        for(int i = left; i <= right; i++){     // left와 right 사이 수들을 구하기 위한 반복문
            cnt =0; 			     
            for(int j = 1; j <= i; j++){
               if(i%j == 0) cnt++; 		// i에서 j로 나눈 나머지 값이 0이면 cnt증가
            }    
            if(cnt %2 == 0) answer += i; 	// 약수의 갯수(cnt)가 짝수라면 i값 더하기 
            else answer -= i; 			// 홀수라면 i값 빼기
        }        
    return answer;
}

 

문제

함수 solution은 정수 x와 자연수 n을 입력 받아,

x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴

 

제한 조건

x는 -10000000 이상, 10000000 이하인 정수

n은 1000 이하인 자연수

 

 

문제풀이(JAVA)

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        answer[0]=0;			// 배열 초기화
        long x1 = x; 			// **
        for(int i =0; i < n; i++){ 	// for문(반복문)을 n번 돌린다 
            answer[i] = x1*(i+1);	// answer배열에 x와 i+1을 곱하여 순서대로 넣는다
        }
        
        return answer;
    }
}

1. 반복문을 n번 돌리는 이유는 x부터 시작해 x씩 증가하는 숫자를 n개 저장해야하기 때문입니다. 
2. **표시되어있는 라인을 보면 int를 long으로 바꿉니다.

 

 만약 데이터형을 long으로 바꾸지 않는다면 연산의 값이 int 범위에서 벗어날 때 answer[i]에 엉뚱한 값이 들어가기 때문에 long으로 꼭 바꿔주어야 합니다. 
=> 연산의 값 : x1*(i+1) int 범위 : -2,147,483,648 ~ 2,147,483,647