온라인 저지 / 온라인 개발 환경 / 자신만의 소스코드 관리 / 코딩테스트 최신 출제 경향 / 알고리즘 성능 측정 / 알고리즘 문제 해결 과정
입출력 / 배열 / 진법 변환 / 삼항 연산자 / 순열 / 조합 / heap / deque / priority queue
당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은
1. 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완
1. 문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞 번호의 학생이나 바로 뒷 번호의 학생에게만 체육복을 빌려줄 수 있습니
1. 문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.예를 들어, 숫자 1924에서 수 두개를 제거하면 19, 12, 14, 92, 94, 24를 만들 수 있습니다. 이 중 가장 큰 숫자는 94입니다.
1. 문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.예를 들어, 주어진 정수가 6, 10, 2라면 6102, 6210, 1026, 2610, 2106를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
1. 문제 설명 2. 제한 사항 3. 입출력 예 4. 문제 풀이 1) 문제 풀이 접근 배열을 오름차순 정렬해서 가장 작은 수가 K보다 작으면 가장 작은 수와 두 번째로 작은 수를 연산해서 새로운 수를 만듦 연산에 사용된 두개의 수를 제외하고 새로운 수가 추가된 배
동적 계획법 : 알고리즘의 진행에 따라 탐색해야 할 범위를 동적으로 결정함으로써 탐색 범위를 한정할 수 있음
재귀적인 성질을 가진 "한 붓 그리기" 문제는 재귀적인 성질을 가진 "그래프의 깊이 우선 탐색"을 응용하여 해결할 수 있음
1. 거스름 돈 / 2. 1이 될 때까지 / 3. 곱하기 혹은 더하기 / 4. 모험가 길드
1. 상하좌우 문제 2. 시각 문제 3. 왕실의 나이트 문제 4. 문자열 재정렬 문제
1. 음료수 얼려 먹기 문제 2. 미로 탈출 문제
1. 두 배열의 원소 교체 문제
1. 떡볶이 떡 만들기 문제 2. 정렬된 배열에서 특정 수의 개수 구하기
1. 개미 전사 / 2. 1로 만들기 / 3. 효율적인 화폐 구성 / 4. 금광 / 5. 병사 배치하기
1. 전보 문제 2. 미래 도시 문제
하나의 자연수를 입력 받아 각 자릿수의 합을 계산하는 프로그램inputoutput
10개의 수를 입력 받아, 그 중에서 가장 큰 수를 출력하는 프로그램3 3 17 1 39 8 41 2 32 99 222 8 5 123 7 2 63 7 3 466 63 2 3 58 76 21 33 8 1
입력으로 1개의 정수 N 이 주어짐정수 N 의 약수를 오름차순으로 출력하는 프로그램
알파벳으로 이루어진 문자열을 입력 받아 각 알파벳을 1부터 26까지의 숫자로 변환하여 출력ord : 알파벳을 아스키 코드로 변환chr : 아스키 코드를 알파벳으로 변환A는 아스키 코드로 65
연월일 순으로 구성된 8자리의 날짜가 입력으로 주어진다해당 날짜의 유효성을 판단한 후, 날짜가 유효하다면 ”YYYY/MM/DD”형식으로 출력날짜가 유효하지 않을 경우, -1 을 출력하는 프로그램연월일로 구성된 입력에서 월은 1~12 사이 값을 가져야 한다일은 1일 ~
N = 2^a x 3^b x 5^c x 7^d x 11^e / N이 주어질 때 a, b, c, d, e 를 출력하라
이전에 셌던 번호들의 각 자리수에서 0에서 9까지의 모든 숫자를 보는 것은 최소 몇 번 양을 센 시점일까?
문제 - A사 : 1리터당 P원의 돈을 내야 한다. - B사 : 기본 요금이 Q원이고, 월간 사용량이 R리터 이하인 경우 요금은 기본 요금만 청구된다. 하지만 R 리터보다 많은 양을 사용한 경우 초과량에 대해 1리터당 S원의 요금을 더 내야 한다.
"level" 과 같이 거꾸로 읽어도 제대로 읽은 것과 같은 문장이나 낱말을 회문(回文, palindrome)이라 한다 단어를 입력 받아 회문이면 1을 출력하고, 아니라면 0을 출력하는 프로그램을 작성하라 각 단어의 길이는 3 이상 10 이하이다
N X N 크기의 단어 퍼즐을 만들려고 한다. 입력으로 단어 퍼즐의 모양이 주어진다. 주어진 퍼즐 모양에서 특정 길이 K를 갖는 단어가 들어갈 수 있는 자리의 수를 출력하는 프로그램을 작성하라.
패턴에서 반복되는 부분을 마디라고 부른다. 문자열을 입력 받아 마디의 길이를 출력하는 프로그램을 작성하라. 각 문자열의 길이는 30이다. 마디의 최대 길이는 10이다. 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
[SWEA D2] 1948. 날짜 계산기월 일로 이루어진 날짜를 2개 입력 받아, 두 번째 날짜가 첫 번째 날짜의 며칠째인지 출력하는 프로그램을 작성하라.
RC (Radio Control) 카의 이동거리를 계산하려고 한다.
[SWEA D2] 1961. 숫자 배열 회전 N x N 행렬이 주어질 때, 시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.
[SWEA D2] 1954. 달팽이 숫자달팽이는 1부터 N*N까지의 숫자가 시계방향으로 이루어져 있다. 다음과 같이 정수 N을 입력 받아 N크기의 달팽이를 출력하시오. 달팽이의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)
N x N 배열 안의 숫자는 해당 영역에 존재하는 파리의 개수를 의미한다. M x M 크기의 파리채를 한 번 내리쳐 최대한 많은 파리를 죽이고자 한다. 죽은 파리의 개수를 구하라!
입력으로 9 X 9 크기의 스도쿠 퍼즐의 숫자들이 주어졌을 때, 위와 같이 겹치는 숫자가 없을 경우, 1을 정답으로 출력하고 그렇지 않을 경우 0 을 출력한다.
크기가 N인 파스칼의 삼각형을 만들어야 한다.파스칼의 삼각형이란 아래와 같은 규칙을 따른다. 첫 번째 줄은 항상 숫자 1이다. 두 번째 줄부터 각 숫자들은 자신의 왼쪽과 오른쪽 위의 숫자의 합으로 구성된다.
숫자 1부터 순서대로 차례대로 말하되, “3” “6” “9” 가 들어가 있는 수는 말하지 않는다. "3" "6" "9"가 들어가 있는 수를 말하지 않는대신, 박수를 친다. 이 때, 박수는 해당 숫자가 들어간 개수만큼 쳐야 한다.
입력으로 각각의 학생들의 중간, 기말, 과제 점수가 주어지고, 학점을 알고싶은 K 번째 학생의 번호가 주어졌을 때, K 번째 학생의 학점을 출력하는 프로그램을 작성하라.
이 문서를 압축한 문서는 알파벳과 그 알파벳의 연속된 개수로 이루어진 쌍들이 나열되어 있다. (예 : A 5 -> AAAAA) 압축된 문서를 입력 받아 원본 문서를 만드는 프로그램을 작성하시오.
10개의 수를 입력 받아, 최대 수와 최소 수를 제외한 나머지의 평균값을 출력하는 프로그램을 작성하라. (소수점 첫째 자리에서 반올림한 정수를 출력한다.)
25년 간의 수행 끝에 원재는 미래를 보는 능력을 갖게 되었다. 이 능력으로 원재는 사재기를 하려고 한다. 다만 당국의 감시가 심해 한 번에 많은 양을 사재기 할 수 없다. 다음과 같은 조건 하에서 사재기를 하여 최대한의 이득을 얻도록 도와주자.
어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만들려고 한다. 이때, 이 학교에서는 최빈수를 이용하여 학생들의 평균 수준을 짐작하는데, 최빈수를 출력하는 프로그램을 작성하여라.
[SWEA D3] 1208. [S/W 문제해결 기본] 1일차 - Flatten 풀이 가장 작은 값을 min 함수로 찾고 index로 몇 번째 인덱스인지 확인해서 배열에 있는 값을 1만큼 늘림 가장 큰 값을 max 함수로 찾고 index로 몇 번째 인덱스인지 확인해서 배열에 있는 값을 1만큼 줄임
문제 : 1209. [S/W 문제해결 기본] 2일차 - Sum 풀이
문제 : [SWEA D3] 1213. [S/W 문제해결 기본] 3일차 - String 풀이 line.find(word, index) : line의 index 자리부터 word가 있는지 확인, 있으면 해당 index 반환 없으면 -1 반환 만약 -1을 반환하면 카운트를 종료함 다음 탐색은 해당 index에서 word 길이만큼 더한 index부터 시작
(Runtime error) Error Message:Memory error occured, (e.g. segmentation error, memory limit Exceed, stack overflow,... etc)
문제 : [SWEA D3] 1215. [S/W 문제해결 기본] 3일차 - 회문1 풀이 주어진 회문의 길이보다 크거나 같은 개수의 알파벳이 남아있을 때까지 옆으로 이동하면서 앞 뒤 문자를 확인해서 회문인지 확인함 front와 end 변수를 사용해서 front를 1씩 증가, end를 1씩 감소 가로 비교 후 배열을 전치 시켜서 가로로 이동하면서 비교하는 코...
문제 : [SWEA D3] 1216. [S/W 문제해결 기본] 3일차 - 회문2 풀이
문제 : [SWEA D3] 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱 풀이 재귀함수를 이용해서 거듭제곱 구현
문제 : [SWEA D3] 1220. [S/W 문제해결 기본] 5일차 - Magnetic 풀이 위쪽에 1이 있고 그 아래에 2가 있으면 count 1 증가
문제 : [SWEA D3] 1221. [S/W 문제해결 기본] 5일차 - GNS 풀이 dict를 사용해서 특정 key의 value를 1씩 증가시킴 key를 value만큼 반복해서 출력
문제 : [SWEA D3] 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 풀이
문제 : [SWEA D3] 1228. [S/W 문제해결 기본] 8일차 - 암호문1 풀이
문제 : [SWEA D3] 1229. [S/W 문제해결 기본] 8일차 - 암호문2 풀이 D 1 1일 때, 첫 번째 요소 다음 두 번째 요소 하나를 삭제
문제 : [SWEA D3] 1230. [S/W 문제해결 기본] 8일차 - 암호문3 풀이 append를 사용해서 암호문 맨 뒤에 추가
문제 : [SWEA D3] 1234. [S/W 문제해결 기본] 10일차 - 비밀번호 풀이
문제 : [SWEA D2] 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 풀이
문제 : [SWEA D3] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 풀이
프로그래머스 Lv.1 정수 제곱근 판별 >- 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.
[프로그래머스 Lv.1] 문자열 다루기 기본 > - 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. a.isdigit() : a가 숫자인지 확인 a.isalpha() : a가 알파벳인지 확인 a.is...
[프로그래머스 Lv.2] JadenCase 문자열 만들기 > - JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고) 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, sol...
[프로그래머스 Lv.1] 최대공약수와 최소공배수
[프로그래머스 Lv.2] 올바른 괄호 > - 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 ...
[프로그래머스 Lv.2] 이진 변환 반복하기 > - 0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다. 예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" ->...
[프로그래머스 Lv.1] 같은 숫자는 싫어 (스택/큐) > - 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수
[프로그래머스 Lv.2] 숫자의 표현 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다. > 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15...
[프로그래머스 Lv.1] 이상한 문자 만들기 > - 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. space인지 확인해서 space이면 answer에 space를 추가...
[프로그래머스 Lv.1] 3진법 뒤집기 > - 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. divmod를 이용해서 n을 3으로 나누고 난 후 나머지를 base에 하나씩 추가함 문제에서 3진법의 앞뒤를 뒤집으라고 했지만, 저렇게 나머...
[프로그래머스 Lv.1] 예산 파이썬 언어 풀이 자바 언어 풀이 정렬 방식 Python 오름차순 정렬 : arr.sort() 내림차순 정렬 : arr.sort(reverse = True) Java 오름차순 정렬 : Arrays.sort(arr) 내림차순 정렬 : Arrays.sort(arr, Collections.reverseOrder()) 자바에서...
[프로그래머스 Lv.2] 다음 큰 숫자 파이썬 언어 풀이 자바 언어 풀이 첫 번째 도전 정확성 70점 + 효율성 0점 = 70점 파이썬 언어로 구현했을 때 100점을 맞았던 방식을 자바 언어로 구현하면 효율성에서 점수를 받지 못함 두 번째 도전(정답) 정확성 70점 + 효율성 30점 = 100점 첫 번째 풀이는 Integer.toBinaryStri...
[프로그래머스 Lv.1] 시저 암호 > - 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solut...
파이썬 풀이 자바 풀이 Arrays.copyOfRange()을 이용해서 배열을 slice함 Arrays.sort()로 slice한 배열을 오름차순 정렬함
[프로그래머스 Lv.1] 소수 찾기 (완전 탐색) 파이썬 풀이 permutations를 이용해서 모든 조합을 구함
[프로그래머스 Lv.2] 타겟 넘버(DFS/BFS) dfs(i)로 dfs(i - 1)과 dfs(i + 1)을 호출 idx가 numbers 길이와 같아지면 종료 이때 target과 결과값이 같으면 count 증가 후 종료 같지 않으면 그냥 종료
[프로그래머스 Lv.3] 네트워크(DFS/BFS) 파이썬 풀이
\[프로그래머스 Lv.2] 게임 맵 최단거리(DFS/BFS)
[프로그래머스 Lv.1] [1차] 비밀지도 풀이 "지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다." 따라서 OR 연산(|) 수행 OR 연산한 결과를 format으로 이진수로 변환 zfill(n)로 앞에 0을 붙여서 n으로 자리수를 맞춤
[프로그래머스 Lv.2] 카펫 풀이 brown 테두리 안에 yellow가 있으려면 세로 길이는 최소 3 이상이 되어야 함 세로 길이를 3부터 1씩 증가 시키면서 brown과 yellow의 모든 개수를 담을 수 있는 가로 길이를 찾음 가로와 세로 길이를 찾으면 그 안에 yellow가 알맞게 들어갈 수 있는지 1씩 내부 yellow 공간을 줄이면서 확인
[프로그래머스 Lv.2] 영어 끝말잇기 문제 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어...