전체 글 (254)
2021-12-26 01:09:54
반응형

x만큼 간격이 있는  n개의 숫자

 

 문제 설명

 

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

 

 제한 사항

 

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.

 

 입출력 예

 

x n answer
2 5 [ 2, 4, 6, 8, 10 ]
4 3 [ 4,  8, 12 ]
-4 2 [ -4, -8 ]

 

 Python 코드

def solution(x, n):
    return [x * i for i in range(1, n+1)]
def solution(x, n):
    return [ x + (x*i) for i in range(n)]

* 참고 링크 : https://wayhome25.github.io/algorithm/2017/03/04/number_generator/

# 정수 x, 자연수 n이 매개변수로 주어짐

def solution(x, n):
	# 정답을 저장할 List 변수를 선언
    # n개의 None으로 초기화
    answer = [None] * n
    
    # 0부터 n-1까지 반복
    for i in range(n):
    	# answer의 현재 index에 x * (i + 1) 값을 저장
        answer[i] = x * (i + 1)
        
    # answer의 값을 반환
    return answer

* 참고 링크 : https://brightnightsky77.tistory.com/397

 

* range() 함수 : 

  • range( 시작숫자, 종료숫자, step )
  • range() 함수의 기본 형태는 List Slicing과 유사
  • range() 함수는 시작 숫자와 step은 생략이 가능
  • for in 반복문에서 range 함수 활용 가능
for 변수 in range(횟수):
	반복할 코드
for i in range(100):
	print("Hello, World!")

* 참고 링크 1 : https://wikidocs.net/16045

* 참고 링크 2 : https://dojang.io/mod/page/view.php?id=2241 

 

 C++ 코드

 

#include <string>
#include <vector>

using namespace std;

vector<long long> solution(int x, int n) {
    vector<long long> answer;
    
    int temp = x;
    
     for (int i = 0; i < n; i++)
    {
           answer.push_back(x);
           x += temp;
    }
    return answer;
}

* 참고 링크 : https://chlqhqodlekt.tistory.com/m/118

#include <string>
#include <vector>

using namespace std;

vector<long long> solution(int x, int n) {
    vector<long long> answer;

    for(int i=1; i<=n; i++){
        answer.push_back(x*i);
    }

    return answer;
}

* 참고 링크 : https://ryulurala.tistory.com/m/165

반응형
2021-12-26 01:08:10
반응형

짝수와 홀수

 

 문제 설명

 

정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.

 

 제한 사항

 

  • num은 int 범위의 정수입니다.
  • 0은 짝수입니다.

 

 입출력 예

 

num return
3 "Odd"
4 "Even"

 

 Python 코드

 

def solution(num):
	if num % 2 == 0:
    	return 'Even'
    else:
    	return 'Odd'
  • num이 짝수이면 Even을, 홀수이면 Odd를 리턴

* 참고 링크 : https://it-garden.tistory.com/224

def solution(num):
    return "Even" if num % 2 == 0 else "Odd"

 

* 참고 링크 : https://velog.io/@cosmos/Programmers%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A7%9D%EC%88%98%EC%99%80-%ED%99%80%EC%88%98-python

 

* 삼항연산자 (Ternary Operrators)

- 일반적으로 if ~ else 문을 통해서 해결할 수 있는 연산을 한 줄로 간단하고 간결하게 구현 가능

삼항 연산자 기본 형태

[True] if [Condition] else [False]

[참일떄] if [조건문] else [거짓일때]

# 짝수인지 홀수인지 판단

a = 10

# 기본 연산

if a % 2 == 0:
	print("Even")
else:
	print("Odd")


# 삼항 연산

print("Even") if a % 2 == 0 else print("Odd")

* 참고 링크 1 : https://blockdmask.tistory.com/551

* 참고 링크 2 : https://wikidocs.net/20701

 

 C++ 코드

 

#include <string>
#include <vector>

using namespace std;

string solution(int num) {
    string answer = "";
    
    if( num%2 == 0 )
        answer += "Even";
    else
        answer += "Odd";
    
    return answer;
}

* 참고 링크 : https://jjeongil.tistory.com/651

반응형
2021-12-26 01:05:11
반응형

수박수박수박수박수박수?

 

 문제 설명

 

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요.

예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

 

 제한 사항

 

  • n은 길이 10,000이하인 자연수입니다.

 

 입출력 예

 

n return
3 "수박수"
4 "수박수박"

 

 Python 코드

 

def solution(n):
    return ('수박'*n)[:n]

 

  • '수박' * n --> 입력받은 n만큼 '수박' 반복 
  • solution(3)이면 '수박수박수박' 이므로 slicing 필요 
  • 따라서 입력받은 n만큼 출력해주면 된다. [:n]
def solution(n): 
	answer = '' 
    
    for i in range(n): 
    	if i % 2 == 0: 
        	answer += '수' 
        else: 
        	answer += '박' 
    return answer

 

  • i를 2로 나눈 값이 0이면 짝수 --> '수' 추가 
  • i를 2로 나눈 값이 0이 아니면 홀수 --> '박' 추가 
  • n = 3이면 i = 0, answer = '수' / i = 1, answer = '수박' / i = 2, answer = '수박수' 
  • n = 4이면 i = 0, answer = '수' / i = 1, answer = '수박' / i = 2, answer = '수박수' / i = 3, answer = '수박수박'

 

* 참고 링크 : https://wooaoe.tistory.com/70

def solution(n):
    return "수박"*(n//2) + "수"*(n%2)

 

  • n을 2로 나눈 값이 반복되는 횟수
  • 그 횟수만큼 '수박'을 붙여주고, 홀수일 경우에는 뒤에 "수"가 한번 더 붙습니다.

* 참고 링크 : https://sinsomi.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-Python-%EC%88%98%EB%B0%95%EC%88%98%EB%B0%95%EC%88%98%EB%B0%95%EC%88%98%EB%B0%95%EC%88%98%EB%B0%95%EC%88%98

 

* Slicing(슬라이싱) : 연속적인 객체들에 범위를 지정한 후 선택해서 객체들을 가져오는 방법 

- 기본 형태

a[start : end : step]
  • start : 슬라이싱을 시작할 시작 위치
  • end : 슬라이싱을 끝낼 위치로 end는 포함되지 않음
  • step : stride(보폭)라고도 불리며, 몇 개씩 끊어서 가져올지와 방향을 정하는 옵션

- 인덱스 값들의 위치

a = ['a', 'b', 'c', 'd', 'e']

# Index References
# -------------------------------
# |  a  |  b  |  c  |  d  |  e  |
# -------------------------------
# |  0  |  1  |  2  |  3  |  4  |    // 양수의 경우
# -------------------------------
# | -5  | -4  | -3  | -2  | -1  |    // 음수의 경우
# -------------------------------

 

- 특정 시작위치부터 끝까지 가져오기

  • a[ start : ]
a = ['a', 'b', 'c', 'd', 'e']

a[ 1 : ]
# result : ['b', 'c', 'd', 'e']

a[ -3 : ]
# result : ['c', 'd', 'e']

 

- 시작점부터 특정 위치까지 가져오기

  • a[ : end ]
a = ['a', 'b', 'c', 'd', 'e']
a[ : 2 ]

# result : ['a', 'b']

 

- 특정 위치부터 특정 위치까지 모두 가져오기

  • a[ start : end ]
a = ['a', 'b', 'c', 'd', 'e']

a[ 2 : 4 ]
# result : ['c', 'd']


a[ -4 : -2 ]
# result : ['b', 'c']

* 참고 링크 : https://twpower.github.io/119-python-list-slicing-examples

 

 C++ 코드

 

#include <string>
#include <vector>

using namespace std;

string solution(int n) {
    string answer = "";
    
    for(int i=0; i<n; i++){
        if(i%2 == 0)
            answer += "수";
        else
            answer += "박";
    }
    
    return answer;
}

* 참고 링크 : https://jjeongil.tistory.com/643

반응형
2021-12-24 22:49:51
반응형

평균 구하기

 

 문제 설명

 

정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.

 

 제한 사항

 

  • arr은 길이 1 이상, 100 이하인 배열입니다.
  • arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.

 

 입출력 예

 

arr return
[1, 2, 3, 4] 2.5
[5, 5] 5

 

 Python 코드

 

def solution(arr):
    return sum(arr) / len(arr)
  • 배열 arr의 합을 구해 배열 arr의 길이만큼 나눠 리턴

* 참고 링크 : https://it-garden.tistory.com/227

def solution(arr):
    answer = 0
    
    for i in arr:
        answer += i
    
    return answer / len(arr)

* 참고 링크 : https://jjeongil.tistory.com/773

def solution(arr):
    
    # 예외 피하기 위한 조건
    if len(arr) == 0:
        return 0
    
    return sum(arr) / len(arr)
  • 배열의 합을 구한뒤 배열의 길이로 나누어주면 평균 값을 구할 수 있다.
  • 단, 예외를 피하기 위해 배열의 길이가 0이면 0을 return한다.

* 참고 링크 : https://jokerldg.github.io/algorithm/2021/04/17/average.html

 

* len() 함수 : 매개변수로 들어온 문자열의 길이를 반환

- 내부에 있는 문자의 갯수 및 공백을 포함한 카운팅을 하여 반환해주는 함수

- 문자열의 길이를 구할 때 용이

strlen = "HelloWorld"
print(len(strlen))

# 결과값 10

 

* sum() 함수 :  합을 구해주는 함수

- sum() 함수의 인자로는 iterable이 들어가야 한다. (List, Tuple등이 있다.)

- sum(object)의 형태가 되어야 하며, 숫자(int, float)로만 구성되어 있어야 한다.

sum([1, 2, 3])   
# result : 6

sum([1, b, 3])   
# 숫자가 아닌 객체가 있을 때 Type Error 발생

 

 C++ 코드

 

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

// arr_len은 배열 arr의 길이입니다.
double solution(int arr[], size_t arr_len) {
    double answer = 0;
    
    for (int i=0; i < arr_len; i++){
        answer += arr[i];
    }
    
    answer = answer / arr_len;
    return answer;
}

* 참고 링크 : https://jjeongil.tistory.com/613

 

#include <string>
#include <vector>

using namespace std;
double solution(vector<int> arr) {
	double answer = 0;
	for (int i = 0; i < arr.size(); i++)
		answer += arr[i];
	return answer/arr.size();
}

* 참고 링크 : https://it-and-life.tistory.com/211

반응형
2021-12-24 22:36:15
반응형

6048. 두 정수(a, b)를 입력받아 a가 b보다 작으면 True 를, a가 b보다 크거나 같으면 False 를 출력하는 프로그램을 작성해보자.

예시
print(123<456)  #비교 연산자 < 의 계산 결과인 True(참)가 출력된다.
(123, 456 은 숫자로 작성된 단어이기 때문에 10진수로 인식된다.)

참고
어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 < (less than sign) 는
왼쪽의 값이 오른쪽 값 보다 작은 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해 주는 연산자이다.

비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

True(참) 또는 False(거짓) 값으로만 표현하고 저장하는 값을 불(bool)/불리언(boolean) 값이라고 한다.
정수, 실수, 문자, 문자열과 마찬가지로 또 다른 형태의 데이터형(data type)이다.

a, b = map(int, input().split())
if a < b:
  print(True)
elif a >= b:
  print(False)

* if / else / elif 비교

if     => 만약에

else => 만약에 그렇지 않으면

elif  => else if => 만약 그렇지 않으면 이건 어때?

출처: https://blockdmask.tistory.com/372 [개발자 지망생]


6049. 두 정수(a, b)를 입력받아 a와 b의 값이 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자.

참고
어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 == (equal sign 2개) 는
왼쪽의 계산 결과값과 오른쪽의 계산 결과값이 같은 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해 주는 연산자이다.

비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

** 수학에서 왼쪽과 오른쪽의 계산 결과가 같음(동치)을 나타내는 기호 =(equal sign) 1개는
프로그래밍언어에서는 전혀 다른 의미로 사용된다.

a = 1 와 같은 표현은 a와 1의 값이 같다는 의미가 아니라
오른쪽의 계산 결과값인 1을 왼쪽의 변수 a에 저장하라는 의미이다.

a, b = map(int, input().split())
if a == b :
  print(True)
elif a != b :
  print(False)

 

6050. 두 정수(a, b)를 입력받아 b의 값이 a의 값 보다 크거나 같으면 True 를, 같지 않으면 False 를 출력하는 프로그램을 작성해보자.

참고
어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 <= 는
오른쪽의 계산 결과값이 왼쪽의 계산 결과값보다 크거나 같은 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

<=, >= 연산자는 같음(==)을 포함한다. 따라서 “작다/크다” 거나 "같다”는 의미를 가진다.
작다(<)/크다(>)/다르다(!) 기호는 등호(=)와 함께 왼쪽에 붙여써야 한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해주는 연산자이다.
비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

a , b  = map(int, input().split())
if b >= a:
  print(True)
elif b != a:
  print(False)

 

6051. 두 정수(a, b)를 입력받아 a의 값이 b의 값과 서로 다르면 True 를, 같으면 False 를 출력하는 프로그램을 작성해보자.

참고
어떤 값을 비교하기 위해 비교/관계(comparison/relational) 연산자(operator)를 사용할 수 있다.

비교/관계연산자 != 는
왼쪽의 계산 결과값이 오른쪽의 계산 결과값이 서로 다른 경우 True(참)로 계산하고,
그 외의 경우에는 False(거짓)로 계산한다.

비교/관계연산자도 일반적인 사칙연산자처럼 주어진 두 수를 이용해 계산을 수행하고,
그 결과를 True(참), 또는 False(거짓)로 계산해주는 연산자이다.
비교/관계연산자는 <, >, <=, >=, ==(같다), !=(다르다) 6개가 있다.

a, b = map(int, input().split())
if a != b:
  print(True)
elif a == b:
  print(False)
반응형
2021-12-24 21:33:49
반응형

6046. 정수 1개를 입력받아 2배 곱해 출력해보자.

참고
*2 를 계산한 값을 출력해도 되지만,
정수를 2배로 곱하거나 나누어 계산해 주는 비트단위시프트연산자 <<, >>를 이용할 수 있다.
컴퓨터 내부에는 2진수 형태로 값들이 저장되기 때문에,
2진수 형태로 저장되어 있는 값들을 왼쪽(<<)이나 오른쪽(>>)으로
지정한 비트 수만큼 밀어주면 2배씩 늘어나거나 1/2로 줄어드는데,

왼쪽 비트시프트(<<)가 될 때에는 오른쪽에 0이 주어진 개수만큼 추가되고,
오른쪽 비트시프트(>>)가 될 때에는 왼쪽에 0(0 또는 양의 정수인 경우)이나 1(음의 정수인 경우)이 개수만큼 추가되고,
가장 오른쪽에 있는 1비트는 사라진다.

예시
n = 10
print(n<<1)  #10을 2배 한 값인 20 이 출력된다.
print(n>>1)  #10을 반으로 나눈 값인 5 가 출력된다.
print(n<<2)  #10을 4배 한 값인 40 이 출력된다.
print(n>>2)  #10을 반으로 나눈 후 다시 반으로 나눈 값인 2 가 출력된다.

정수 10의 2진수 표현은 ... 1010 이다.
10 << 1 을 계산하면 ... 10100 이 된다 이 값은 10진수로 20이다.
10 >> 1 을 계산하면 ... 101 이 된다. 이 값은 10진수로 5이다.

n = 10 과 같이 키보드로 입력받지 않고 직접 작성해 넣은 코드에서, 숫자로 시작하는 단어(식별자, identifier)는 자동으로 수로 인식된다.  

n = 10 에서 10 은 10진수 정수 값으로 인식된다.
변수 n 에 문자열을 저장하고 싶다면, n = "10" 또는 n = '10'으로 작성해 넣으면 되고,

 

n = 10.0 으로 작성해 넣으면 자동으로 실수 값으로 저장된다.
n = 0o10 으로 작성해 넣으면 8진수(octal) 10으로 인식되어 10진수 8값이 저장되고,
n = 0xf 나 n = 0XF 으로 작성해 넣으면 16진수(hexadecimal) F로 인식되어 10진수 15값으로 저장된다.

** python에서 실수 값에 대한 비트시프트 연산은 허용되지 않고 오류가 발생한다.
(실수 값도 컴퓨터 내부적으로는 2진수 형태로 저장되고 비트시프트 처리가 될 수 있지만, python 에서는 허용하지 않는다.) 

a = int(input())
print(a<<1)

 

6047.  정수 2개(a, b)를 입력받아 a를 2b배 곱한 값으로 출력해보자.
0 <= a <= 10, 0 <= b <= 10

예시
a = 2
b = 10
print(a << b)  #210 = 1024 가 출력된다.

참고
예를 들어 1 3 이 입력되면 1을 23(8)배 하여 출력한다.

a, b = map(int, input().split())
print( a<<b )

반응형