N개의 최소공배수

 

 문제 설명

 

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

 

 제한 사항

 

  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다.

 

 입출력 예

 

arr return
[2, 6, 8, 14] 168
[1, 2, 3] 6

 

 Python 코드

 

import math

def solution(num):
    answer = num[0]
    for n in num:
        answer = (n * answer) // math.gcd(n, answer)
    return answer
  • 최대공약수 gcd는 math.gcd를 이용해 구해주고,
     
    최소공배수 lcm은 A * B // gcd(A,B) 이므로 for문을 돌면서 맨 마지막 answer를 return 해주면 된다.

* 참고 링크 : https://wookcode.tistory.com/101

def solution(arr):
    answer = 0
    max_num = 1
    for a in arr:
        max_num *= a
    
    for i in range(2, max_num+1):
        for a in arr:
            if i%a != 0:     # 나누어 떨어지지 않는다면 break
                break
                             # 위에서 break에 걸리지 않았다면 
                             # 모두 나누어 떨어지는 것이기 때문에 해당 i를 answer에 대입
        else:
            answer = i
            break
    return answer

* 참고 링크 : https://kimmeh1.tistory.com/190

 C++ 코드

 

#include <string>
#include <vector>

using namespace std;
int GCD(int a, int b){         // 최대공약수
    if(a == 0) return b;
    return GCD(b % a, a);
}
int LCM(int a, int b){         // 최소공배수
    return a * b / GCD(a,b);
}
int solution(vector<int> arr) {
    int answer = 0;
    answer = arr[0];
    for(int i=1;i<arr.size();i++){
        answer = LCM(answer, arr[i]);
    }
    return answer;
}
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int gcd(int x, int y) { return x % y == 0 ? y : gcd(y, x % y); }
int lcm(int x, int y) { return x * y / gcd(x, y); }
int solution(vector<int> arr) {
    int answer = arr[0];
    for (int i = 1; i < arr.size(); i++)
        answer = lcm(answer, arr[i]);
    return answer;
}

 

문자열 다루기 기본

 

 문제 설명

 

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

 

 제한 사항

 

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.

 

 입출력 예

 

s return
"a234" false
"1234" true

 

 Python 코드

 

def solution(s):

    if (len(s) == 4 or len(s) == 6) and s.isdigit():
        return True
    else:
        return False

 

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

* isdigit ( ) 함수 : 문자열이 숫자로만 이루어져 있는지 확인하는 함수

- 문자가 단 하나라도 있다면 False를 반환하고, 모든 문자가 '숫자'로만 이루어져 있으면 True를 반환한다.

isdigit ( ) 함수는 string 클래스에 있는 메서드이다. 즉, 문자열.isdigit( ) 형태로 사용하는 메서드이다.

ex) str.isdigit()

a = "CodingTest" # 문자로만 이루어짐
b = "은하철도999" # 문자 + 숫자
c = "-999"       # 음수
d = "3.14"       # 소수점
e = "2022"       # 숫자

print(f"str.isdigit('{a}') : {str.isdigit(a)}")
print(f"str.isdigit('{b}') : {str.isdigit(b)}")
print(f"str.isdigit('{c}') : {str.isdigit(c)}")
print(f"str.isdigit('{d}') : {str.isdigit(d)}")
print(f"str.isdigit('{e}') : {str.isdigit(e)}")

print()

print(f"'{a}'.isdigit() : {a.isdigit()}")
print(f"'{b}'.isdigit() : {b.isdigit()}")
print(f"'{c}'.isdigit() : {c.isdigit()}")
print(f"'{d}'.isdigit() : {d.isdigit()}")
print(f"'{e}'.isdigit() : {e.isdigit()}")

 

 

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

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

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

 
strlen = "HelloWorld"
 
print(len(strlen))
 
 
 
# 결과값 10

 

 C++ 코드

 

#include <string>
#include <vector>
//#include <cctype>
 
using namespace std;
 
bool solution(string s) 
{
    //1. 길이로 쳐낸다.
    const size_t length = s.length();
    if(length != 4 && length != 6)
    {
        return false;
    }
 
    //2. 문자가 있으면 쳐낸다.
    for(size_t i=0; i<length; ++i)
    {
        //if(!isdigit(s[i]))
        if(!(s[i] >= '0' && s[i] <= '9'))
        {
            return false;
        }
    }
 
    return true;
}

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

문자열 내림차순으로 배치하기

 

 문제 설명

 

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

 

 제한 사항

 

  • str은 길이 1 이상인 문자열입니다.

 

 입출력 예

 

s return
"Zbcdefg" "gfedcbZ"

 

 Python 코드

 

def solution(s):
    return "".join(sorted(list(s), reverse = True))

 

 

 

* join 함수 : 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수


''.join(리스트)

'구분자'.join(리스트)

join 함수는 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수이다.

- ''.join(리스트)
''.join(리스트)를 이용하면 매개변수로 들어온 ['a', 'b', 'c'] 이런 식의 리스트를 'abc'의 문자열로 합쳐서 반환해주는 함수이다.

- '구분자'.join(리스트)
'구분자'.join(리스트)를 이용하면 리스트의 값과 값 사이에 '구분자'에 들어온 구분자를 넣어서 하나의 문자열로 합쳐준다.
'_'.join(['a', 'b', 'c']) 라 하면 "a_b_c" 와 같은 형태로 문자열을 만들어서 반환해 준다.


''.join(리스트)는 '구분자'.join(리스트)에서 '구분자'가 그냥 공백인 것과 같다.

즉, 정리하자면 join함수의 찐 모양은 '구분자'.join(리스트) 이다.

참고 링크 : https://blockdmask.tistory.com/468

sorted(정렬할 데이터)

sorted(정렬할 데이터, reverse 파라미터) 

sorted(정렬할 데이터, key 파라미터)

sorted(정렬할 데이터, key 파라미터, reverse 파라미터)

※ 리스트의 메소드인 sort()를 사용하여도 정렬이 된다. 
이 경우에는 리스트 자체를 변경해 버린다. 
일반적으로 이것보다는 내장함수인 sorted()가 더 편리하다. 
또한 sort()는 리스트만을 위한 메소드이지만 sorted() 함수는 어떤 이터러블 객체도 받을 수 있다.

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

 

* 리스트 정렬 (sort) : sort 함수는 리스트의 요소를 순서대로 정렬

a = [1, 4, 3, 2]
a.sort()
a
# result : [1, 2, 3, 4]
a = ['a', 'c', 'b']
a.sort()
a
# result : ['a', 'b', 'c']

 

* sorted ( ) 함수 : sorted(iterable) 함수는 입력값을 정렬한 후 그 결과를 리스트로 돌려주는 함수

sorted([3, 1, 2])
# result : [1, 2, 3]

sorted(['a', 'c', 'b'])
# result :  ['a', 'b', 'c']

sorted("zero")
# result :  ['e', 'o', 'r', 'z']

sorted((3, 2, 1))
# result : [1, 2, 3]

* 참고 링크 : https://wikidocs.net/32#sorted

 

 C++ 코드

 

#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
string solution(string s) {
    string answer = s;
    sort(answer.begin(),answer.end(),greater<char>());
    return answer;
}

https://wilybear.tistory.com/85

문자열 내 p와 y의 개수

 

 문제 설명

 

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

 

 제한 사항

 

  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다.

 

 입출력 예

 

s answer
"pPoooyY" true
"Pyy" false

 

 Python 코드

 

def solution(s):
    return s.lower().count('p') == s.lower().count('y')
  • lower ( ) 함수를 사용하여 문자열을 모두 소문자로 바꾼 뒤
  • count ( ) 함수로 문자열 내의 p와 y의 개수를 센 것 을 비교하여 바로 True 또는 False가 나옴

 

* upper ( ) 함수 : a를 대문자 문자열로 변환

* lower ( ) 함수 : b를 소문자 문자열로 변환

 
a = "hi"
 
print("a를 대문자로:", a.upper())
 
 
 
b = "HI"
 
print("b를 소문자로:", b.lower())

* count ( ) 함수 : 문자열에서 사용되는 함수로 특정 문자, 또는 문자열이 포함되어 있는지 카운팅 해주는 함수

 
 
 
str1 = '111112345'
print(str1.count('1')) #5
print(str1.count('11')) #2

my_name = 'minhee kang'
print(my_name.count('min')) #1
print(my_name.count('e'))  #2

# 리스트에 사용가능
my_name_list = ['min', 'hee', 'kang']
print(my_name_list.count('min')) #1
print(my_name_list.count('e'))  #0

# 튜플에 사용가능
my_name_tuple = ('min', 'hee', 1)  #이렇게 int 형 섞여있어도 가능
print(my_name_list.count('min')) #1
print(my_name_list.count('e'))  #0

# 집합에 사용가능
my_name_set = {'min', 'hee', 1}
print(my_name_list.count('min')) #1
print(my_name_list.count('e'))  #0
 
 

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

* 참고 링크 2 : https://velog.io/@himinhee/python-count-%ED%95%A8%EC%88%98

 C++ 코드

 

#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

char easytolower(char in) {
  if(in <= 'Z' && in >= 'A')
    return in - ('Z' - 'z');
  return in;
}

bool solution(string s)
{
    int p = 0;
    int y = 0;
    transform(s.begin(), s.end(), s.begin(), easytolower);
    for(int i = 0; i < s.size(); i++){
        if(s[i] == 'p')
            p++;
        else if(s[i] == 'y')
            y++;
    }

    if(p == y )
        return true;
    else
        return false;
}
#include <string>
#include <iostream>
using namespace std;
bool solution(string s)
{
	int p = 0, y = 0;
	for (int i = 0; i < s.length(); i++)
	{
		if (tolower(s[i]) == 'p') p++;
		else if (tolower(s[i]) == 'y') y++;
	}
	return (p - y == 0) ? true : false;
}

 

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

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

이상한 문자 만들기

 

 문제 설명

 

문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

 

 제한 사항

 

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

 

 입출력 예

 

s return
"try hello world" "TrY HeLIO WoRID"

 

 Python 코드

 

def solution(s):
    new_list = []				 # 문자열을 새로 만들어야 하니 빈 리스트 생성
    words_list = s.split(" ")     # 받은 문자열을 단어별(스페이스 기준)으로 split해서 list에 넣어주기
    for word in words_list:		 # 단어 리스트에 있는 단어들 반복할 때 그 단어 길이 만큼 반복문
        new_words = ""	             # 단어가 반복할 때 맞춰서 빈 string이 채워지는거니까 여기에 맞게 빈 String 만들기
        for i in range(len(word)): # 단어 리스트에 있는 단어들 반복할 때 그 단어 길이 만큼 반복문
            if i % 2:
                new_words += word[i].lower() # 단어가 짝수면 소문자로 바꿔서 빈 stirng에 붙여주기
            else:
                new_words += word[i].upper() # 단어가 홀수면 대문자로 바꿔서 빈 stirng에 붙여주기
        new_list.append(new_words)     # 단어 하나가 반복이 끝나면 빈 list에 새로운 string 붙여주기
    return ' '.join(new_list)          # 새로 채워진 list new_words에 있는 요소들 붙여서 return (스페이스 중간에 넣어주기)
def toWeirdCase(s):
    # 함수를 완성하세요
    return ' '.join([''.join([c.upper() if i % 2 == 0 else c.lower() for i, c in enumerate(w)]) for w in s.split(' ')])


def toWeirdCase(s):
    return " ".join(map(lambda x: "".join([a.lower() if i % 2 else a.upper() for i, a in enumerate(x)]), s.split(" ")))

* 참고 링크 : https://velog.io/@joygoround/test-%EC%9D%B4%EC%83%81%ED%95%9C-%EB%AC%B8%EC%9E%90-%EB%A7%8C%EB%93%A4%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

* upper ( ) 함수 : a를 대문자 문자열로 변환

* lower ( ) 함수 : b를 소문자 문자열로 변환

a = "hi"
print("a를 대문자로:", a.upper())

b = "HI"
print("b를 소문자로:", b.lower())

* split ( ) 함수 : 문자열 나누기

a = "Life is too short"
a.split()
# result : ['Life', 'is', 'too', 'short']

* 참고 링크 : https://wikidocs.net/13

 

 C++ 코드

#include <string>

using namespace std;

string solution(string s) {
    int idx = 0;
    
    for(int i=0; i<s.size(); i++){
        
        if(s[i] == ' '){
            idx=0;
            continue; 
        }
        
        if(idx%2){
            if(s[i] <= 'Z') s[i]+=32;
        }
        else{
            if(s[i] >= 'a') s[i]-=32;  
        }
        idx++;
    }
    
    return s;
}

 

#include <string>

using namespace std;

string solution(string s) {
    int idx = 0;
    
    for(int i=0; i<s.size(); i++){
        
        if(s[i] == ' '){
            idx=0;
            continue; 
        }
       
        if(idx%2){
            s[i] = tolower(s[i]);
        }
        else{
            s[i] = toupper(s[i]); 
        }
        idx++;
    }
    
    return s;
}

* 참고 링크 : https://iingang.github.io/posts/Programmers-12930/

약수의 합

 

 문제 설명

 

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

 

 제한 사항

 

  • n은 0 이상 3000이하인 정수입니다.

 

 입출력 예

 

n return
12 28
5 6

입출력 예 설명

입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.

 Python 코드

 

def solution(n):
    answer = 0
    for i in range(1, n+1):
        if n % i == 0:
            answer += i
    return answer

- print(solution(12) # result : 28

- print(solution(5) # result : 6

def s(num): 
	return sum([i for i in range(1, num+1) if num % i == 0])

* 참고 링크 : https://excelsior-cjh.tistory.com/38

 

 C++ 코드

 

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    
    for(int i=1; i <=n; i++){
        if(n%i == 0)
            answer +=i;
    }
    return answer;
}

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

핸드폰 번호 가리기

 

 문제 설명

 

프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

 

 제한 사항

 

  • s는 길이 4 이상, 20이하인 문자열입니다.

 

 입출력 예

 

phone_number return
"01033334444" "*******4444"
"027778888" "*****8888"

 

 Python 코드

 

def solution(phone_number):
    answer = '' 					
    phone_len = len(phone_number)	
    answer += '*' * (phone_len -4) + phone_number[-4:] 

    return answer

 

def solution(phone_number):
 
    answer = '' 			# 빈 문자열을 만든다.
 
    for i in range(len(phone_number[:-4])): # 처음부터 뒤에서 5번째꺼 까지 반복을 해주는데
 
        answer += "*" 			# 빈 문자열 answer에 * 을 추가해주고
 
    for i in phone_number[-4:]: # phone_number 리스트에서 뒤에서 4번째부터 마지막까지
 
        answer += i 			# answer 에 넣어준다.
 
    return answer

 

def solution(s):
 
    return "*"*(len(s)-4) + s[-4:]
  • len ( ) 함수로 문자열의 총 길이를 구한다.
  • 4자리마 가리면되므로 치호나할 개순느 총 개수 -4이다.
  • python에서는 문자 * 복사할 개수의 연산이 가능하다.
  • index slicing으로 뒷 4자리를 구한다

 

* 참고 링크 1 : https://velog.io/@cosmos/Programmers%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%95%B8%EB%93%9C%ED%8F%B0-%EB%B2%88%ED%98%B8-%EA%B0%80%EB%A6%AC%EA%B8%B0-python

* 참고 링크 2 : https://velog.io/@como/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4%ED%95%B8%EB%93%9C%ED%8F%B0-%EB%B2%88%ED%98%B8-%EA%B0%80%EB%A6%AC%EA%B8%B0python

 

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

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

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

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

# 결과값 10

 

* 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(string phone_number) {
    string answer = "";
    
    int size = phone_number.size();
    
    for(int i=0; i<size-4; i++){
        answer += '*';
    }
    
    for(int i=size-4; i < size; i++){
        answer += phone_number.at(i);
    }
    
    return answer;
}

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

서울에서 김서방 찾기

 

 문제 설명

 

String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

 

 제한 사항

 

  • seoul은 길이 1 이상, 1000 이하인 배열입니다.
  • seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
  • "Kim"은 반드시 seoul 안에 포함되어 있습니다.

 

 입출력 예

 

seoul return
["Jane", "Kim"] "김서방은 1에 있다."

 

 Python 코드

 

def solution(seoul):
    return "김서방은 {}에 있다".format(seoul.index('Kim'))
def solution(seoul):
    for i in range(len(seoul)):
        if "Kim" == seoul[i]:
            a = i
            break
    answer = '김서방은 {}에 있다'.format(a)
    return answer
  • index()를 이용하여 리스트내 특정 값의 주소를 알 수 있다
  • format()을 이용하여 string내에 변수 값을 넣을 수 있다

* 참고 링크 : https://hodunamu.com/python-%EC%84%9C%EC%9A%B8%EC%97%90%EC%84%9C-%EA%B9%80%EC%84%9C%EB%B0%A9-%EC%B0%BE%EA%B8%B0/

def solution(seoul): 
	answer = '' 
    
    x = seoul.index('Kim') 
    answer = '김서방은 '+str(x)+'에 있다' 
    
    return answer

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


* index ( ) :  리스트에 x 값이 있으면 x의 위치 값을 돌려준다.

 a = [1,2,3]
 
 a.index(3)
# result : 2

a.index(1)
# result : 0

* 참고 링크 : https://wikidocs.net/14

* format ( ) : 문자열 함수

"{} {} {}".format(10, 20, 30)
# result : '10 20 30'
"{0}은 서울에 있다.".format("김서방")
# result : '김서방은 서울에 있다.'
"I eat {0} apples".format(3)
# result : 'I eat 3 apples'

* 참고 링크 : https://wikidocs.net/13

 

 

 C++ 코드

#include <string>
#include <vector>

using namespace std;

string solution(vector<string> seoul) {
    string answer = "";
    answer += "김서방은 ";
    
    for(int i = 0; i < seoul.size(); i++){
        if(seoul[i] == "Kim"){
            answer += to_string(i);
        }
    }
    answer += "에 있다";
    return answer;
}

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

가운데 글자 가져오기

 

 문제 설명

 

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

 

 제한 사항

 

  • s는 길이가 1 이상, 100이하인 스트링입니다.

 

 입출력 예

 

s return
"abcde" "c"
"qwer" "we"

 

 Python 코드

 

def solution(s):
    return s[(len(s)-1)//2 : len(s)//2+1]
  • 찍수인 경우 // 연산자로 몫을 구하고, 홀수일 경우에도 Slicing으로 계산
def solution(s):

    answer = ''

    if len(s) % 2 == 1:
        return s[int(len(s)/2)]
    else:
        return s[int(len(s)/2)-1 : int(len(s)/2)+1]

* 참고 링크 : https://jeongchul.tistory.com/642

# 가운데 글자 가져오기
def solution(s):
    # 글자의 길이
    s_length = len(s)
    # 글자의 길이가 홀수인 경우 가운데 글자를 뽑아내기
    if s_length % 2 == 1:
        answer = s[s_length // 2]
    # 글자의 길이가 짝수인 경우 가운데 두 글자를 뽑아내기
    if s_length % 2 == 0:
        answer = s[(s_length // 2) - 1:(s_length // 2) + 1]
    return answer

* 참고 링크 : https://greedysiru.tistory.com/381

  • 나머지 연산자 %
    어떤 정수를 2로 나누었을 때 나머지가 1이면 홀수, 0이면 짝수.
def solution(s):
	if len(s) % 2 == 1:
    		return 가운데 값
#s의 길이를 2로 나눈 나머지가 1이면 = 홀수면

"""
!POINT!
여기서 == 1은 쓰지 않아도 된다!
왜? 조건문에서는 '기냐 아니냐'를 보기 때문에, 
%를 2로 나눴기 때문에 0과 1의 값만 나오는 상황에서
숫자값 0은 False, 1은 True가 된다.
"""

#나머지가 1이 아니면 = 짝수면
	else:
		return 가운데 값에서 +1, -1 값

 

  • 나누기 연산자 //
def solution(s):
	if len(s) % 2 == 1:
		return s[len(s)//2]

#s의 리스트 s[]를 만들고 = 해당 인덱스의 '값'을 출력하기 위해
#len(s)//2한 인덱스의 값을 반환

	else:
		return 가운데 값에서 +_1 값
  • 최종 코드

 

def solution(s):
	if len(s) % 2 == 1:
		return s[len(s)//2]
	else:
		return s[(len(s)//2-1) : (len(s)//2+1)]

#짝수에서 출력하는 인덱스의 
#-1값 == len(s)//2-1)과 
#+1값 == (len(s)//2+1)을 함께 반환하자

* 참고 링크 : https://velog.io/@joy/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B0%80%EC%9A%B4%EB%8D%B0-%EA%B8%80%EC%9E%90-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0

* 파이썬에수 함수를 쓰는 공식

def 함수명(인풋):
		코드1
		코드2 
		...
		return 아웃풋
        
#s라는 단어에 영향을 주는 solution라는 함수를 만들라고 했으니까

def solution(s):
    return 아웃풋

* 참고 링크 : https://velog.io/@joy/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B0%80%EC%9A%B4%EB%8D%B0-%EA%B8%80%EC%9E%90-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0

 

* 산술 연산자

* 참고 링크 : https://wikidocs.net/1153

 

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

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

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

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

# 결과값 10

 

* 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(string s) {
    string answer = "";
    static const size_t TWO = 2;
    const size_t length = s.length();
    
    if(length % TWO == 0)
    {
        //짝수
        answer += s[length / 2 - 1];
        answer += s[length / 2];
    }
    else
    {
        //홀수
        answer += s[length / 2];
    }
    return answer;
}

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

두 정수 사이의 합

 

 문제 설명

 

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

 

 제한 사항

 

  • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.

 

 입출력 예

 

a b return
3 5 12
3 3 3
5 3 12

 

 Python 코드

 

def solution(a, b):
    if a > b : 
        a , b = b , a
    return sum(range(a, b+1))

 

def solution(a, b):

    answer = 0

    for i in range(min(a,b), max(a,b)+1):
    
        answer += i
        
    return answer

 

def solution(a, b):

    return ( abs(a - b) + 1)  * ( a + b ) // 2
  • 수학 공식 사용
  • 1부터 N까지의 총합은 N(N+1)/2 
  • a에서 b까지의 총합 ((a-b)+1) * (a+b) // 2

* 참고 링크 1 : https://jeongchul.tistory.com/645

* 참고 링크 2 : https://velog.io/@cosmos/Programmers%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%91%90-%EC%A0%95%EC%88%98-%EC%82%AC%EC%9D%B4%EC%9D%98-%ED%95%A9-python

* abs ( ) 함수 : 어떤 숫자를 입력받았을 때, 그 숫자의 절댓값을 돌려주는 함수

abs(3)
# result : 3

abs(-3)
# result : 3

abs(-1.2)
# result : 1.2

 

* min( ) 함수 : min(iterable)은 max 함수와 반대로, 인수로 반복 가능한 자료형을 입력받아 그 최솟값을 돌려주는 함수

min([1, 2, 3])
# result : 1

min("python")
# result : 'h'

 

* max( ) 함수 : max(iterable)는 인수로 반복 가능한 자료형을 입력받아 그 최댓값을 돌려주는 함수

max([1, 2, 3])
# result : 1

max("python")
# result : 'y'

 

* 참고 링크 : https://wikidocs.net/32

 

 C++ 코드

 

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

long long solution(int a, int b) {
    long long answer = 0;
    
    long long sum = 0;
    if ( a > b ){
        for ( int i = b; i < a+1; i++)
            answer += i;
    } 
    else if ( a < b ) {
        for ( int i = a; i < b+1; i++)
            answer += i;
    }
    else {
        answer = a;
    }
    
    return answer;
}

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

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

짝수와 홀수

 

 문제 설명

 

정수 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

+ Recent posts