memostack
article thumbnail
프로그래머스 - 가운데 글자 가져오기 (Java)
Algorithm 2020. 8. 29. 17:36

문제의 저작권은 프로그래머스(https://www.acmicpc.net/)에게 있습니다. 문제 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 예제 // Input abcde // Output c // Input qwer // Output we Coding - Java substring()을 이용하여, 가운데에 위치한 문자를 가져온다. public static String solution(String s) { String answer = ""; final int length = s.length(); if (0 == length % 2) { // 짝수 final in..

article thumbnail
백준 1330번 - 두 수 비교하기 (Java)
Algorithm/Beakjoon 2020. 8. 28. 19:32

문제의 저작권은 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오. 예제 // Input 1 2 // Output // Input 5 5 // Output == Coding - Java 단순히 if문을 이용하여 두 수를 비교하여 알맞은 부등호를 출력하면 된다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void..

article thumbnail
백준 1000번 - A + B (Java)
Algorithm/Beakjoon 2020. 8. 28. 19:20

문제의 저작권은 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 예제 // Input 1 2 // Output 3 Coding - Java 콘솔로 입력을 받을때는 Scanner 또는 BufferedReader, System.in.read()가 있다. 본 글에서는 BufferedReader 와 System.in.read()를 이용하여 문제를 풀었다. 방법 1. BufferedReader 이용 import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[]..

article thumbnail
백준 Ex.10171번 - 고양이 (JAVA)
Algorithm/Beakjoon 2020. 8. 26. 18:08

문제의 저작권은 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 아래 예제와 같이 고양이를 출력하시오. 예제 // Input 없음 // Output \ /\ ) ( ') ( / ) \(__)| Coding - Java 쉬운 문제 같지만, 성급하게 풀면 이스케이프 문자를 신경쓰지 못하고 틀릴 확률이 높다. (정답률도 36.614%...) 백슬래쉬(\)를 주의해서 입력해야 함. public class Main { public static void main(String[] args) { System.out.println("\\ /\\\n" + " ) ( ')\n" + "( / )\n" + " \\(__)|"); } } 채점 결과 Reference https://www.acmic..

article thumbnail
백준 Ex.10718번 - We love kriii (JAVA)
Algorithm/Beakjoon 2020. 8. 26. 17:54

문제의 저작권은 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 ACM-ICPC 인터넷 예선, Regional, 그리고 World Finals까지 이미 2회씩 진출해버린 kriii는 미련을 버리지 못하고 왠지 모르게 올 해에도 파주 World Finals 준비 캠프에 참여했다. 대회를 뜰 줄 모르는 지박령 kriii를 위해서 격려의 문구를 출력해주자. 예제 // Input 없음 // Output 강한친구 대한육군 강한친구 대한육군 Coding - Java 간단한 문제이고, 방법 2가지로 풀어볼 수 있다. 방법 1. System.out.println()를 2번 호출 방법 2. 개행문자(\n)를 이용 방법 3. 람다식을 이용한 방법 (비추천, 비효율적이기 때문에) // 방법 ..

article thumbnail
백준 Ex.2557번 - Hello World (JAVA)
Algorithm/Beakjoon 2020. 8. 26. 17:48

문제의 저작권은 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 Hello World!를 출력하시오. 예제 // Input // Output Hello World! Coding - Java 프로그래밍을 처음 배우면 가장 먼저 만들어보는 프로그램으로, 단순히 표준 출력을 이용하여 Hello World!를 찍어주면 된다. public class Main { public static void main(String[] args) { System.out.println("Hello World!"); } } 채점 결과 Reference https://www.acmicpc.net/problem/2557 2557번: Hello World Hello World!를 출력하시오. www.acm..

article thumbnail
백준 10996번 - 별 찍기 - 21 (Python3)
Algorithm/Beakjoon 2020. 6. 29. 20:55

본 문제는 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. 예제 # 입력 1 # 출력 * # 입력 2 # 출력 * * * * # 입력 3 # 출력 * * * * * * * * * Coding - Python3 규칙 찾기 n이 1일때는 별(*) 하나를 반환하다. 나머지 경우 (n이 2이상인 경우) 2*n 줄 만큼 별이 그려진다. 한 열의 길이는 n이다. 별(*)과 띄어쓰기( )가 번갈아가며 나온다. 홀수번째 줄은 별(*)부터 시작한다. 짝수번째 줄은 띄어쓰기( )부터 시작한다. # -*- coding: utf-8 -*- import sys def solution(k): if 1 == k: print("*") return r..

article thumbnail
백준 2446번 - 별 찍기 - 9 (with Python3)
Algorithm/Beakjoon 2020. 6. 23. 21:59

본 문제는 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. 예제 # 입력 5 # 출력 ********* ******* ***** *** * *** ***** ******* ********* Coding - Python3 상단, 하단을 나눠서 별을 찍는다. 규칙을 파악한다. 상단: 2 * n - 1 (n이 점차 감소) 만약 n = 5 라면, 9, 7, 5, 3, 1 하단: 2 * n - 1 (n이 점차 증가) 만약 n = 5 라면, 1, 3, 5, 7, 9 # -*- coding: utf-8 -*- import sys def solution(num): # 상단 별 for i in range(num, 0, -1): print..

article thumbnail
백준 2523번 - 별 찍기 - 13 (with Python3)
Algorithm/Beakjoon 2020. 6. 22. 21:05

본 문제는 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. 예제 # 입력 3 # 출력 * ** *** ** * Coding - Python3 for 문 2개를 이용해서 '상단 별'과 '하단 별'을 그린다. # -*- coding: utf-8 -*- import sys def solution(num): # 상단 별 for _ in range(num): print("*" * (_ + 1)) # 하단 별 for _ in range(num - 1, 0, -1): print("*" * _) if __name__ == "__main__": num = int(sys.stdin.readline()) solution(num) 비슷한 문제..

article thumbnail
백준 14681번 - 사분면 고르기 (with Python3)
Algorithm/Beakjoon 2020. 6. 22. 20:33

본 문제는 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다. 예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다. 점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다. 예제 # 입력 12 5 # 출력 1 # 입력 9 -13 # 출력 4 Coding - Python3 if문을 이용하여 x와 y..

article thumbnail
Java 스택(Stack)을 이용해서 순열 구하기
Algorithm 2020. 2. 24. 21:43

순열 [1, 2, 3]의 순열은 [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1] 이다. 이처럼 같은 원소가 중복되지 않고, 조합하여 나올 수 있는 모든 경우의 집합을 뜻한다. 재귀와 스택을 이용해서 순열을 생성하는 코드를 작성한다. 코드 아래 2가지 자료구조를 사용한다. Stack stack: 원소를 담을 스택 boolean[] chosen: 이미 포함한 원소를 구분하기 위한 불리안 배열 private static void search(Stack stack) { if (stack.size() >= n) { System.out.println(stack.toString()); } else { for(int i=1; i= n) { System..

article thumbnail
Java 멱집합 구하기 (PowerSet)
Algorithm 2020. 2. 23. 22:48

멱집합 구하기 Stack과 Recursive를 이용하여, 멱집합 (Power Set) 을 구한다. {1, 2, 3} 집합의 부분 집합은 {}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3} 이다. (공집합 포함) Java 코드 재귀함수 search() search() 메소드를 생성한다. private static void search(Stack stack, int k) { if(k >= n + 1) { System.out.println(stack.toString()); // 부분 집합을 출력한다. } else { // k를 부분집합에 포함한다. stack.add(k); search(stack, k + 1); // k를 부분집합에 포함하지 않는다. stack.pop..

article thumbnail
최댓값 찾기 알고리즘 (with Python3)
Algorithm 2020. 2. 19. 23:21

최댓값 찾기 최댓값을 찾는 알고리즘 상당히 간단한 알고리즘이다. (하나하나 비교하면 됨) 하나씩 비교를 하다보니 시간복잡도는 O(n)이 된다. 코드 본 글에서는 unittest를 이용하여 알고리즘을 풀이합니다. 로직이 달라지는것은 아닙니다. 사실 파이썬에는 max() 라는 내장함수를 제공해주는데, max([5, 3, 2]) 안에 숫자로 구성된 리스트를 넣어주면 알아서 최댓값을 반환해준다. # -*- coding: utf-8 -*- import unittest class Exam02(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.items = [10, 92, 4, 7, 44, 80, 98, 50, 74, 32] ...생략... def ..

article thumbnail
알고리즘의 시간 복잡도 - 빅오(O) 표기법
Algorithm 2020. 2. 16. 13:47

수 많은 알고리즘이 존재하지만, 어떤 알고리즘이 성능이 좋은지 평가하는 확실한 방법은 무엇일까? 방법은 수학적으로 증명하는 방법이다. 빅오(O) 표기법 빅오 표기법은 알고리즘의 성능 평가 방법 중 가장 많이 사용하는 방법 중 하나다. 가장 많이 사용하는 이유는 최악의 성능을 측정할 수 있기 때문이다. (최악의 성능을 알 수 있다면, 적어도 이 정도의 성능은 보장한다는 뜻이므로) 빅오 표기법 이외에도 오메가 표기법(Omega Notation), 세타 표기법(Theta Notation) 이 있지만, 본 글에서는 빅오 표기법에 대해서만 논한다. 알고리즘 분석하기 분석하기 전, 가정 3가지 헤더 파일은 알고리즘의 성능에 영향을 주지 않는다. 함수 진입, 함수 반환은 알고리즘 성능에 영향을 주지 않는다. 프로그램..

article thumbnail
1 부터 n 까지 더하기 알고리즘 (with python)
Algorithm 2020. 2. 16. 00:56

본 글은 Python3.7 환경에서 진행합니다. unittest 로 작성되어 있지만, 알고리즘을 확인하는데는 문제가 없습니다. 단순히 더하는 방법 결론부터 이야기 하자면 이 방법은 비효율적이다. 1 부터 10 까지 더하는 알고리즘을 작성하면 아래와 같이 생각할 수 있다. 코드 test_sum 함수를 보자. # -*- coding: utf-8 -*- import unittest class Exam01(unittest.TestCase): def test_sum(self): """1 부터 n 까지 더하는 알고리즘""" answer = 0 # 정답 for _ in range(1, 11): answer += _ # 1 부터 10까지 더한다. self.assertEqual(answer, 55) if __name__..