Same Tree

 

 문제 설명

 

Given the roots of two binary trees p and q, write a function to check if they are the same or not.

Two binary trees are considered the same if they are structurally identical, and the nodes have the same value.

 

 제한 사항

 

  • The number of nodes in both trees is in the range [0, 100].
  • -104 <= Node.val <= 104

 

 입출력 예

 

input output
p = [1, 2, 3] , q = [1, 2, 3] True
p = [1, 2] , q = [1, null, 3] False
p = [1, 2, 1] , q = [1, 1, 2] False

 

 Python 코드

 

Python 8ms code 

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right

class Solution(object):
    def isSameTree(self, p, q):
     
        if not p and not q:
            return True
        if not p or not q:
            return False
        
        return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
  • isSameTree( )는 왼쪽의 서브 트리와 오르른쪽의 서브트리가 동일한지를 판단하는 재귀함수

* 참고 링크 : https://velog.io/@wisepine/Leetcode-Same-Tree

 

 C++ 코드

 

C ++ 100% 0ms code

- String으로 바꾸지 않고 맨 뒤의 값과 맨 앞의 값을 비교하면서 푼 코드

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(p == NULL && q == NULL) // if the two nodes are empty nodes, return true
            return true;
        else if((p == NULL && q != NULL) || (p != NULL && q == NULL)) // if only one of the nodes from p and q is emtpy, 2 trees are not equal
            return false;
        else 
            return p->val == q->val && isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
						// First we compare the values in each node from p and q. Then, use a recursive method, call isSameTree function with left nodes of p and q as parameters. Do the same for the right nodes.
    }
};

* 참고 링크 : https://leetcode.com/problems/same-tree/discuss/166896/C++-solution-beats-100

 

 출처

 

https://leetcode.com/problems/same-tree/submissions/

Palindrome Number

 

 문제 설명

 

Given an integer x, return true if x is palindrome integer.

An integer is a palindrome when it reads the same backward as forward.

  • For example, 121 is a palindrome while 123 is not.

 

 제한 사항

 

  • -231 <= x <= 231 - 1

 

 입출력 예

 

x return
121 True
-121 False
10 False

 

 Python 코드

 

  • int를 문자열로 변환

 

135ms code Python

class Solution:
    def isPalindrome(self, x: int) -> bool:
        return str(x) == str(x)[::-1]

 

56ms code Python

class Solution:
    def isPalindrome(self, x: int) -> bool:
        return False if x < 0 else str(x) == str(x)[::-1]

 

* 참고 링크 1 : https://hackmd.io/@y56/Hk6PWb7mr?type=view 

* 참고 링크 2 : https://dhairya2136.medium.com/leetcode-9-palindrome-number-python-bdcd99bd7068

 

* Python Array [ :: ] 용법

arr[::], arr[1:2:3], arr[::-1] 등으로 배열의 index에 접근하는 방법을 Extended Slices(확장형 슬라이스)라고 한다.

arr[A:B:C]의 의미는, index A 부터 index B 까지 C의 간격으로 배열을 만들어라는 말입니다.
- A가 None 이라면, 처음부터 라는 뜻
- B가 None 이라면, 할 수 있는데까지
- C가 양수라면 마지막 index까지, C가 음수라면 첫 index까지가 된다.
- 마지막으로 C가 None 이라면 한 칸 간격으로 라는 뜻
arr = range(10) 
arr 
# result : [0,1,2,3,4,5,6,7,8,9] 

arr[::2] # 처음부터 끝까지 두 칸 간격으로 
# result : [0,2,4,6,8] 

arr[1::2] # index 1 부터 끝까지 두 칸 간격으로 
# result : [1,3,5,7,9] 

arr[::-1] # 처음부터 끝까지 -1칸 간격으로 ( == 역순으로) 
# result : [9,8,7,6,5,4,3,2,1,0] 

arr[::-2] # 처음부터 끝까지 -2칸 간격으로 ( == 역순, 두 칸 간격으로) 
# result : [9,7,5,3,1] 

arr[3::-1] # index 3 부터 끝까지 -1칸 간격으로 ( == 역순으로) 
# result : [3,2,1,0] 

arr[1:6:2] # index 1 부터 index 6 까지 두 칸 간격으로 
# result : [1,3,5]

* 참고 링크 1 : https://blog.wonkyunglee.io/3

* 참고 링크 2 : https://docs.python.org/release/2.3.5/whatsnew/section-slices.html

* is_palindrome ( ) 함수 : 회문 판별 함수

palindrome(회문)은 순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어와 문장을 의미한다.
예를 들어 "level", "SOS", "rotator", "nurses run"과 같은 단어와 문장이 있다.
def is_palindrome(word):
    return word[::-1]==word

# True
print( is_palindrome("kayak") )
print( is_palindrome("madam") )
print( is_palindrome("racecar") )
print( is_palindrome("abradacadarba") )
print( is_palindrome("토마토") )

# False
print( is_palindrome('hello') )
print( is_palindrome('coffee') )

* 참고 링크 1 : https://zetawiki.com/wiki/%ED%95%A8%EC%88%98_is_palindrome() 

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

 

 C++ 코드

 

class Solution {
public:
    bool isPalindrome(int x) {
        string temp = std::to_string(x);
        int left = 0;
        int right = temp.size()-1;
        while(left<=right)
        {
            if(temp[left++]!=temp[right--])
                return false;
        }
        return true;
    }
};

 

C ++ 100% 0ms code

- String으로 바꾸지 않고 맨 뒤의 값과 맨 앞의 값을 비교하면서 푼 코드

 class Solution {
public:
    bool isPalindrome(int x) {
        int temp = x;
        long rev, rem;
        rev = 0;
        
        if (x < 0)
            return false;
        
        while (temp != 0){
            rem = temp % 10;
            rev = rev * 10 + rem;
            temp = temp/10;
        }
        
        if (x == rev)
            return true;
        else
            return false;
    }
};

* 참고 링크 : https://kkminseok.github.io/posts/leetcode_Palindrome_Number/

 

 출처

 

https://leetcode.com/problems/palindrome-number/

 

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

6081. 16진수 구구단 출력하기

16진수(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)를 배운
영일이는 16진수끼리 곱하는 16진수 구구단?에 대해서 궁금해졌다.

A, B, C, D, E, F 중 하나가 입력될 때,
1부터 F까지 곱한 16진수 구구단의 내용을 출력해보자.
(단, A ~ F 까지만 입력된다.)

예시
...
  print('%X'%n, '*%X'%i, '=%X'%(n*i), sep='')
...

참고
print('%X'%n)    #n에 저장되어있는 값을 16진수(hexadecimal) 형태로 출력
작은 따옴표 2개를 사용해서 print(..., sep='') 으로 출력하면, 공백없이 모두 붙여 출력된다.
작은 따옴표 2개 '' 또는 큰 따옴표 2개 "" 는 아무 문자도 없는 빈문자열(empty string)을 의미한다.

a = input()

for i in range(1, 16):
  print( '%s*%s=%s' %(a, hex(i)[2:].upper(), hex(int(a, 16) *i )[2:].upper()))

 

6082. 3 6 9 게임의 왕이 되자


친구들과 함께 3 6 9 게임을 하던 영일이는 잦은 실수 때문에 계속해서 벌칙을 받게 되었다.
3 6 9 게임의 왕이 되기 위한 369 마스터 프로그램을 작성해 보자.

** 3 6 9 게임은?
여러 사람이 순서를 정한 후, 순서대로 수를 부르는 게임이다.
만약 3, 6, 9 가 들어간 수를 자신이 불러야 하는 상황이라면, 수를 부르는 대신 "박수(X)" 를 쳐야 한다.
33과 같이 3,6,9가 두 번 들어간 수 일때, "짝짝"과 같이 박수를 두 번 치는 형태도 있다. 

참고 
...
for i in range(1, n+1) :
  if i%10==3 :
    print("X", end=' ')    #출력 후 공백문자(빈칸, ' ')로 끝냄
...

a = int(input())

for i in range(1, a+1):
  if (i % 10 == 3 or i % 10 == 6 or i % 10 == 9):
    print('X', end= ' ')
    continue
    
  print(i, end= ' ')

 

6083. 빨강(red), 초록(green), 파랑(blue) 빛을 섞어 여러 가지 다른 색 빛을 만들어 내려고 한다.

빨강(r), 초록(g), 파랑(b) 각 빛의 가짓수가 주어질 때,
주어진 rgb 빛들을 섞어 만들 수 있는 모든 경우의 조합(r g b)과 만들 수 있는 색의 가짓 수를 계산해보자.  

**모니터, 스마트폰과 같은 디스플레이에서 각 픽셀의 색을 만들어내기 위해서 r, g, b 색을 조합할 수 있다.
**픽셀(pixel)은 그림(picture)을 구성하는 셀(cell)에서 이름이 만들어졌다.
 

r, g, b = input().split()

r = int(r)
g = int(g)
b = int(b)

for i in range(0, r):
  for j in range(0, g):
    for k in range(0, b):
      print(i, j, k)

print(r*g*b)

 

6084. 소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다.

마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크하고,
한 번씩 체크할 때 마다 그 값을 정수값으로 바꾸어 저장하는 방식으로 소리를 파일로 저장할 수 있다.

값을 저장할 때에는 비트를 사용하는 정도에 따라 세세한 녹음 정도를 결정할 수 있고,
좌우(스테레오) 채널로 저장하면 2배… 5.1채널이면 6배의 저장공간이 필요하고,
녹음 시간이 길면 그 만큼 더 많은 저장공간이 필요하다.

1초 동안 마이크로 소리강약을 체크하는 횟수를 h
(헤르쯔, Hz 는 1초에 몇 번? 체크하는가를 의미한다.)

한 번 체크한 값을 저장할 때 사용하는 비트수를 b
(2비트를 사용하면 0 또는 1 두 가지, 16비트를 사용하면 65536가지..)

좌우 등 소리를 저장할 트랙 개수인 채널 개수를 c
(모노는 1개, 스테레오는 2개의 트랙으로 저장함을 의미한다.)

녹음할 시간(초) s가 주어질 때,

필요한 저장 용량을 계산하는 프로그램을 작성해보자.

실제로, 일반적인 CD 음질(44.1KHz, 16bit, 스테레오)로 1초 동안 저장하려면
44100 * 16 * 2 * 1 bit의 저장공간이 필요한데,
44100*16*2*1/8/1024/1024 로 계산하면 약 0.168 MB 정도가 필요하다.

이렇게 녹음하는 방식을 PCM(Pulse Code Modulation) 방법이라고 하는데,
압축하지 않은 순수한(raw) 소리 데이터 파일은 대표적으로 *.wav 가 있다.

**
      8 bit(비트)           = 1byte(바이트)       # 8bit=1Byte
1024 Byte(210 byte) = 1KB(킬로 바이트)  # 1024Byte=1KB
1024 KB(210 KB)      = 1MB(메가 바이트)
1024 MB(210 MB)     = 1GB(기가 바이트)
1024 GB(210 GB)      = 1TB(테라 바이트)

h, b, c, s = input().split()

h = int(h)
b = int(b)
c = int(c)
s = int(s)

print(round(h*b*c*s/8/1024/1024, 1), "MB")

 

6085. 이미지가 컴퓨터에 저장될 때에도 디지털 데이터화 되어 저장된다.

가장 기본적인 방법으로는 그림을 구성하는 한 점(pixel, 픽셀)의 색상을
빨강(r), 초록(g), 파랑(b)의 3가지의 빛의 세기 값으로 따로 변환하여 저장하는 것인데,

예를 들어 r, g, b 각 색에 대해서 8비트(0~255, 256가지 가능)씩을 사용한다고 하면,

한 점의 색상은 3가지 r, g, b의 8비트+8비트+8비트로 총 24비트로 표현해서
총 2^24 가지의 서로 다른 빛의 색깔을 사용할 수 있는 것이다.

그렇게 저장하는 점을 모아 하나의 큰 이미지를 저장할 수 있게 되는데,
1024 * 768 사이즈에 각 점에 대해 24비트로 저장하면 그 이미지를 저장하기 위한
저장 용량을 계산할 수 있다.

이렇게 이미지의 원래(raw) 데이터를 압축하지 않고 그대로 저장하는 대표적인 이미지 파일이
*.bmp 파일이며, 비트로 그림을 구성한다고 하여 비트맵 방식 또는 래스터 방식이라고 한다.

이미지의 가로 해상도 w, 세로 해상도 h, 한 픽셀을 저장하기 위한 비트 b 가 주어질 때,
압축하지 않고 저장하기 위해 필요한 저장 용량을 계산하는 프로그램을 작성해 보자.

예를 들어
일반적인 1024 * 768 사이즈(해상도)의 각점에 대해
24비트(rgb 각각 8비트씩 3개)로 저장하려면
1024 * 768 * 24 bit의 저장공간이 필요한데,
1024*768*24/8/1024/1024 로 계산하면 약 2.25 MB 정도가 필요하다.

실제 그런지 확인하고 싶다면, 간단한 그림 편집/수정 프로그램을 통해 확인할 수 있다.

**
      8 bit(비트)           = 1byte(바이트)     #       8bit=1Byte
1024 Byte(210 byte) = 1KB(킬로 바이트)  # 1024Byte=1KB
1024 KB(210 KB)      = 1MB(메가 바이트)
1024 MB(210 MB)     = 1GB(기가 바이트)
1024 GB(210 GB)      = 1TB(테라 바이트)

a, b, c = map(int, input().split())

totalbit = a * b * c
totalbyte = totalbit / 8
totalkb = totalbyte / 1024
totalmb = totalkb / 1024

print("%0.2f MB" % totalmb)

6077. 정수(1 ~ 100) 1개를 입력받아 1부터 그 수까지 짝수의 합을 구해보자.

예시
#다음 코드는 홀 수만 더해 출력한다.
n = int(input())
s = 0
for i in range(1, n+1) :
  if i%2==1 :
    s += i

print(s)

참고
while 이나 for 반복실행구조를 이용할 수 있다.
다른 방법이나 while 반복실행구조를 이용해서도 성공시켜 보자.

n = int(input())
s = 0

for i in range( 1, n + 1 ):
  if i % 2 == 0:
    s += i

print(s)

 

6078. 영문 소문자 'q'가 입력될 때까지 입력한 문자를 계속 출력하는 프로그램을 작성해보자.

while True:
  a = input()
  print(a)

  if a == 'q':
    break

 

6079. 1, 2, 3 ... 을 계속 더해 나갈 때,
그 합이 입력한 정수(0 ~ 1000)보다 같거나 작을 때까지만
계속 더하는 프로그램을 작성해보자.

즉, 1부터 n까지 정수를 계속 더해 나간다고 할 때,
어디까지 더해야 입력한 수보다 같거나 커지는 지를 알아보고자하는 문제이다.

end_point = int(input())

total = 0 

for i in range(1, end_point+1):
  total += i
  if total >= end_point: 
    break
print(i)

 

6080. 1부터 n까지, 1부터 m까지 숫자가 적힌 서로 다른 주사위 2개를 던졌을 때,
나올 수 있는 모든 경우를 출력해보자.

예시
...
for i in range(1, n+1) :
  for j in range(1, m+1) :
    print(i, j)
...

참고
위 코드는
바깥쪽의 i 값이 1부터 n까지 순서대로 바뀌는 각각의 동안에
안쪽의 j 값이 다시 1부터 m까지 변하며 출력되는 코드이다.

조건선택 실행구조 안에 다른 조건선택 실행구조를 넣어 처리할 수 있는 것과 마찬가지로
반복 실행구조 안에 다른 반복 실행구조를 넣어 처리할 수 있다.

원하는 형태로 실행 구조를 결합하거나 중첩시킬 수 있다.

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

for a in range(1, a+1):
  for b in range(1, b+1):
    print(a, b)

Step 1. README 생성

https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/customizing-your-profile/managing-your-profile-readme

 

Managing your profile README - GitHub Docs

About your profile README You can share information about yourself with the community on GitHub.com by creating a profile README. GitHub shows your profile README at the top of your profile page. You decide what information to include in your profile READM

docs.github.com

Step 2. yaml file 생성

YOUR_GITHUB_USERNAME --> .github --> workflows --> FILE_NAME.yml

# 커밋 먹는 뱀 그래프 생성을 위한 GitHub Action🐍

name: Generate Snake

# Action이 언제 구동될지 결정

on:
  schedule:
    # 6시간마다 한 번(수정 가능)
    - cron: "0 */6 * * *"

  # 자동으로 Action이 실행되도록 함
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      # 뱀 생성
      - uses: Platane/snk@master
        id: snake-gif
        with:
          github_user_name: [Github 아이디]
          # output branch에 gif, svg를 각각 생성
          gif_out_path: dist/github-contribution-grid-snake.gif
          svg_out_path: dist/github-contribution-grid-snake.svg

      - run: git status

      # 변경사항 push
      - name: Push changes
        uses: ad-m/github-push-action@master
        with:
          github_token: $
          branch: master
          force: true

      - uses: crazy-max/ghaction-github-pages@v2.1.3
        with:
          target_branch: output
          build_dir: dist
        env:
          GITHUB_TOKEN: $

 

Step 3. Github Action 실행

Generate Snake → Run Workflow

 

 

Step 4. 프로필에 추가

 

![snake gif](https://github.com/YOUR_USERNAME/YOUR_USERNAME/blob/output/github-contribution-grid-snake.gif)

 

* 참고 링크 1 : https://6h15m.github.io/github/readme/2021/07/20/github-snake.html

* 참고 링크 2 : https://dev.to/mishmanners/how-to-enable-github-actions-on-your-profile-readme-for-a-contribution-graph-4l66?fbclid=iwar2bgcj9b_0owzs_zr5e45y1nbir-9768lyzt1y5a7e4rd4dwwrtauuliss 

 

====================================================================

 

 

개인 액세스 토큰 사용하라고 에러 뜨는데 아직 해결 못하고 있네요 ㅠ

구글링해봐도 이해가 안되네요. 

 

 

 

+ Recent posts