전체 글 (306)
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 )

반응형
2021-12-24 21:22:44
반응형

6043. 실수 2개(f1, f2)를 입력받아 f1 을 f2 로 나눈 값을 출력해보자. 이 때 소숫점 넷째자리에서 반올림하여 무조건 소숫점 셋째 자리까지 출력한다.

(참고)
python 언어에는 나눗셈(division)을 계산하는 연산자(/)가 있다.

컴퓨터 프로그래밍에서 실수 변환이나 실수를 사용하는 계산은 
정확하게 변환되거나 계산되는 것이 아니라, 거의 모두 근사값으로 계산되는 것이라고 할 수 있다.  

실수가 컴퓨터로 저장되기 위해서는 디지털방식으로 2진 정수화되어 저장되어야 하는데, 
그 과정에서 아주 작은 부분이 저장되지 않고 사라지는 잘림(truncation) 오차가 자주 발생하기 때문이다.

계산 결과값 중에서 믿을 수 있는 숫자의 개수를 의미하는, 유효숫자에 대해 찾아보자. 
과학실험에서 온도나 부피를 측정할 때에도 유효숫자는 중요하다. 

f1, f2 = map(float, input().split()) 
print(format((f1/f2), ".3f"))

 

6044. 정수 2개(a, b)를 입력받아 합, 차, 곱, 몫, 나머지, 나눈 값을 자동으로 계산해보자.
단 0 <= a, b <= 2147483647, b는 0이 아니다.

a, b = map(int, input().split())
print(a+b)
print(a-b)
print(a*b)
print(a//b)
print(a%b)
print((round(a/b, 2)))

round()는 반올림하는 함수이다.

ex) print((round(a/b, 2)))

 

6045. 정수 3개를 입력받아 합과 평균을 출력해보자.

(참고)
공백으로 구분된 한 줄로 값들을 입력받기 위해서는
a, b, c = input().split()
과 같은 방법이 가능하고,

공백으로 구분해 두 값을 출력하기 위해서는
print(d, e)
와 같은 방법이 가능하다.

잘라낸 값들은 그 값의 특성(정수, 실수, 문자, 문자열 ...)에 따라 명확하게 변환시킨 후 사용하는 것이 좋다.

python 프로그래밍을 처음 배울 때 좋은 습관(단계)
1. 입력된 문자열을 정확하게 잘라낸다.(공백, 줄바꿈, 구분문자 등에 따라 정확하게 잘라낸다.)
2. 잘라낸 데이터들을 데이터형에 맞게 변환해 변수에 저장한다. (정수, 실수, 문자, 문자열 등에 따라 정확하게 변환한다.)
3. 값을 저장했다가 다시 사용하기 위해, 변수를 이용해 값을 저장하고, 변수를 이용해 계산을 한다.
4. 원하는 결과 값을 필요한 형태로 만들어 출력한다.(공백, 줄바꿈, 구분자, 등에 따라 원하는 형태로 만들어 출력한다.)

a, b, c = map(int, input().split())  
d = (a+b+c)/3
print(a+b+c, format(d, ".2f"))

 

반응형
2021-12-22 00:21:47
반응형

6042. 실수 1개를 입력받아 소숫점 이하 두 번째 자리까지의 정확도로 반올림한 값을 출력해보자.


(예시)

a=float(input())
print( format(a, ".2f") )


(참고)
format(수, ".2f") 를 사용하면 원하는 자리까지의 정확도로 반올림 된 실수 값을 만들어 준다. 

여기서 만들어진 값은 소수점 아래 3번째 자리에서 반올림한 값이다.

컴퓨터 프로그래밍에서 실수 변환이나 실수를 사용하는 계산은
정확하게 변환되거나 계산되는 것이 아니라, 거의 모두 근사값으로 계산되는 것이라고 할 수 있다. 

실수가 컴퓨터로 저장되기 위해서는 디지털방식으로 2진 정수화되어 저장되어야 하는데,
그 과정에서 아주 작은 부분이 저장되지 않고 사라지는 잘림(truncation) 오차가 자주 발생하기 때문이다.

a = round(float(input()), 2)
print(a)

# a = float(input())
# print(format(a, ".2f"))
반응형