Programming

    [Algorithm] 병합/합병 정렬 (Merge Sort)

    🧐 병합 정렬(Merge Sort)이란? 병합 정렬(Merge Sort)는 비교 기반의 정렬 알고리즘으로, 안정 정렬에 속하는 분할 정복 알고리즘이다. 병합 정렬의 알고리즘은 크게 분할(Divide)-정복(Conquer)-결합(Combine), 3단계로 나눌 수 있다. 대략적으로 그 과정을 설명하자면, 정렬되지 않은 배열을 N개의 배열로 분할한다. 배열(리스트)의 길이가 0또는 1인 경우 정렬된 것으로 여긴다. 반면, 그렇지 않은 경우 정렬되지 않은 배열을 절반으로 다시 분할 한 후, 값을 비교한다. 각 부분 배열을 재귀적으로 병합 정렬하며 정렬한다. 두 개의 부분 배열을 다시 하나의 정렬된 리스트로 결합한다. 병합 정렬은 알고리즘이 복잡하지만, 시간복잡도의 측면에서 좋은 효과(O(NlogN))를 보인다..

    [백준/python3] 1929. 소수 구하기 (에라토스테네스의 체)

    📢 문제 설명 문제 자체는 그렇게 어려워보이지 않지만, 이 문제를 통과하기 위해서는 "에라토스테네스의 체" 알고리즘을 알고 있어야한다. 에라토스테네스의 체 2부터 소수를 구하고 싶은 범위까지의 수를 나열한다. 소수의 배수들을 배열에서 제거한다. # 위키백과, 에라토스테네스의 체 def prime_list(n): # 에라토스테네스의 체 초기화: n개 요소에 True 설정(소수로 간주) sieve = [True] * n # n의 최대 약수가 sqrt(n) 이하이므로 i=sqrt(n)까지 검사 m = int(n ** 0.5) for i in range(2, m + 1): if sieve[i] == True: # i가 소수인 경우 for j in range(i+i, n, i): # i이후 i의 배수들을 Fals..

    [백준/python3] 1316. 그룹 단어 체커

    📢 문제 설명 문자열을 입력받고, 해당 문자열이 그룹단어인지 확인한다. 이 때, 그룹 단어는 해당 문자열(단어)에 동일한 알파벳이 1개 이상 존재할 경우, 그 알파벳들을 연속으로 붙어있어야만 한다. ✏️ 코드 풀이 T = int(input()) count = 0 def check(): s = input() tmp = s[0] group = [tmp] flag = 1 for i in range(1, len(s)): if s[i] == tmp: continue else: if s[i] in group: flag = 0 break else: tmp = s[i] group.append(tmp) return flag for t in range(T): count += check() print(count) 문자열 입..

    [백준/python3] 1002. 터렛

    📢 문제 설명 문제를 요약하자면 두 개의 원의 중점의 좌표와 반지름의 길이를 입력하고, 두 개의 원의 접점의 개수를 출력하면 된다. 만약 접점이 무한개(= 중점의 좌표 동일 & 반지름 길이 동일)인 경우 -1을 출력한다. ✏️ 코드 풀이 def turret(): x1, y1, r1, x2, y2, r2 = map(int, input().split()) d = (pow(x1-x2,2)+pow(y1-y2,2))**(1/2) r_list = [r1, r2, d] m = max(r_list) r_list.remove(m) if r1==r2 and d == 0: print(-1) elif m < sum(r_list): print(2) elif m == sum(r_list): print(1) else: print(..

    [백준/python3] 2941. 크로아티아 알파벳

    📢 문제 설명 크로아티아 알파벳은 영어 알파벳('a' ~ 'z')을 포함하고 추가로 'c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='을 포함한다. ✏️ 코드 풀이 croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] for x in range(97, 123): croatia.append(chr(x)) s = input() c = 0 for y in croatia: if y in s: c += s.count(y) s=s.replace(y, ".") #print(s) print(c) 크로아티아 알파벳을 리스트로 저장한다. croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', '..

    [백준/python3] 1157.단어 공부

    📢 문제 설명 고민해야할 부분 문자열 내의 알파벳 개수 세기 대소문자 구분 X ✏️ 코드 풀이 s = input().upper() # print(s) alphabet = list(set(range(65, 91))) c_list = [] for x in alphabet: c_list.append(s.count(chr(x))) # print(c_list) maximum = max(c_list) m_ind = c_list.index(maximum) if c_list.count(maximum) > 1: print("?") else: print(chr(alphabet[m_ind])) 문자열을 모두 대문자로 변환한다. s = input().upper()​ 최종적으로 출력되는 값도 대문자이므로, 문자열을 모두 대문자..

    [백준/python3] 2675. 문자열 반복

    📢 문제 설명 ✏️ 코드 풀이 def re(): r, s = input().split() r = int(r) p = "" for c in s: p += c*r print(p) t = int(input()) for i in range(t): re() re() 함수: 반복적으로 처리될 부분에 대해 함수로 정의 처음 코드를 작성할 때는 새로운 문자열 p를 만드는 부분을 for 문의 실행문에서 p.append(c*r)으로 작성했다. p = [] for c in s: p.append(c*r) 여기서 내가 실수한 부분은 p를 리스트형으로 초기화했다는 것이다. python에서는 문자열("")과 리스트([])가 구분되는 것을 항상 기억해야한다!!! 더보기 리스트 VS 문자열 예시 >>> c = "abc" >>> pri..

    [SWEA] 1933. 간단한 N 의 약수

    문제 문제의 제목 그대로 입력받은 정수 N의 약수를 모두 출력하는 문제이다 입력: 정수 N (1~1,000 >> int 형으로 가능) 출력: 정수 N의 모든 약수 풀이 import java.util.Scanner; import java.io.FileInputStream; class Solution { public static void main(String args[]) throws Exception { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); for(int i=1;i

    [SWEA] 2027. 대각선 출력하기

    문제 문제 화면에 나온 출력화면과 같이 대각선에 #이 출력되도록 한다. 입력: 없음 출력: 대각선에 #, 나머지는 + 풀이 import java.util.Scanner; import java.io.FileInputStream; class Solution { public static void main(String args[]) throws Exception { for(int i=0;i

    [SWEA] 1936. 1대1 가위바위보

    문제 A와 B가 가위바위보를 한다. 가위: 1, 바위: 2, 보: 3 로 입력을 받고, 입력받는 순서대로 A와 B가 낸 값이라고 한다. 이긴 사람의 알파벳을 출력한다. (단, 비기는 경우는 없다고 한다.) 입력: 정수 2개 (차례로 A와 B의 가위/바위/보) 출력: 문자 (이긴 사람) 풀이 import java.util.Scanner; import java.io.FileInputStream; class Solution { public static void main(String args[]) throws Exception { Scanner sc = new Scanner(System.in); int a,b; a = sc.nextInt(); b = sc.nextInt(); System.out.print(a>b..