0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000
세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.You may assume that each inpu
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
상근이는 3003번에서 동혁이가 발견한 체스판을 톱으로 자르려고 한다.상근이는 체스판을 최대 N번 자를 수 있으며, 변에 평행하게만 자를 수 있다. 또, 자를 때는 체스판의 그 변의 한쪽 끝에서 다른쪽 끝까지 잘라야 한다. 자른 후에는 조각을 이동할 수 없다.이때, 최
이 사진은 오래전부터 인터넷에 돌아다니는 사진으로, 작년 전대프연 예선 A번에서는 수학을 정말 못 하는 고등학생인 성원이의 시험지로 소개되었다. 저작권이 있는 사진일 수 있어 알아보기 어렵게 가공했음을 양해 바란다.예선 날짜가 다가오는데도 적당한 A번 문제를 생각하지
숭고한 알고리즘 캠프가 다가오고 있고 방학이 되어서까지도 각 대학들의 협업은 계속되고 있다. 그럼에도 불구하고 운영진들과 강사진들이 각자의 일정 때문에 바빠 계획에 차질이 조금씩 생기고 있다. 숭고한 알고리즘 캠프의 대표인 창호는 효율적인 일처리를 위해 엄정한 평가를
나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다.재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다.재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳
이정도 문제만 나왔으면 정말 좋겟다 ^^ Day Of Mourning의 기타리스트 강토가 사용하는 기타에서 N개의 줄이 끊어졌다. 따라서 새로운 줄을 사거나 교체해야 한다. 강토는 되도록이면 돈을 적게 쓰려고 한다. 6줄 패키지를 살 수도 있고, 1개 또는 그 이상의
학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어의 점수는 레벨을 클리어하면서 얻은 점수의 합으로, 이 점수를 바탕으로 온라인 순위
임한수와 임문빈은 서로 사랑하는 사이이다.임한수는 세상에서 팰린드롬인 문자열을 너무 좋아하기 때문에, 둘의 백일을 기념해서 임문빈은 팰린드롬을 선물해주려고 한다.임문빈은 임한수의 영어 이름으로 팰린드롬을 만들려고 하는데, 임한수의 영어 이름의 알파벳 순서를 적절히 바꿔
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면
항승이는 품질이 심각하게 나쁜 수도 파이프 회사의 수리공이다. 항승이는 세준 지하철 공사에서 물이 샌다는 소식을 듣고 수리를 하러 갔다.파이프에서 물이 새는 곳은 신기하게도 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다.항승이는 길이가 L인 테이프를 무한개 가지고 있
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.폴리오미노로 모두 덮은 보드판
UCPC는 '전국 대학생 프로그래밍 대회 동아리 연합 여름 대회'의 줄임말로 알려져있다. 하지만 이 줄임말이 정확히 어떻게 구성되었는지는 아무도 모른다. UCPC 2018을 준비하던 ntopia는 여러 사람들에게 UCPC가 정확히 무엇의 줄임말인지 물어보았지만, 아무도
0과 1로만 이루어진 행렬 A와 행렬 B가 있다. 이때, 행렬 A를 행렬 B로 바꾸는데 필요한 연산의 횟수의 최솟값을 구하는 프로그램을 작성하시오.행렬을 변환하는 연산은 어떤 3×3크기의 부분 행렬에 있는 모든 원소를 뒤집는 것이다. (0 → 1, 1 → 0)첫째 줄에
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.2를 곱한다.1을 수의 가장 오른쪽에 추가한다.A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.A를 B로 바꾸는데 필요한 연산
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게
요세푸스 문제는 다음과 같다.1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수
길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 Xi ≠ Yi인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다.두 문자열 A와 B가 주어진다. 이때, A의 길이는 B의 길이보다 작거나 같다. 이제
문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다.먼저, 문자열 S는 아래와과 같은 규칙을 지킨다.알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' \`'), 특수 문자('<', '>\`')로만 이루어져 있다.문자열의 시작과 끝은 공백
에라토스테네스의 체는 N보다 작거나 같은 모든 소수를 찾는 유명한 알고리즘이다.이 알고리즘은 다음과 같다.2부터 N까지 모든 정수를 적는다.아직 지우지 않은 수 중 가장 작은 수를 찾는다. 이것을 P라고 하고, 이 수는 소수이다.P를 지우고, 아직 지우지 않은 P의 배
비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에
신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.예를 들어 7대의 컴퓨터가 <그림 1>과 같이 네트워크 상에서 연결되어 있다고 하자. 1
그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.첫째 줄
N×M 크기의 공간에 아기 상어 여러 마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 아기 상어가 최대 1마리 존재한다.어떤 칸의 안전 거리는 그 칸과 가장 거리가 가까운 아기 상어와의 거리이다. 두 칸의 거리는 하나의 칸에서 다른 칸으로
철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다.https://upload.acmicpc.net/de29c64f-dee7-4fe0-afa9-afd6fc4aad
코레스코 콘도미니엄 8층은 학생들이 3끼의 식사를 해결하는 공간이다. 그러나 몇몇 비양심적인 학생들의 만행으로 음식물이 통로 중간 중간에 떨어져 있다. 이러한 음식물들은 근처에 있는 것끼리 뭉치게 돼서 큰 음식물 쓰레기가 된다.이 문제를 출제한 선생님은 개인적으로 이러
N×M크기의 배열로 표현되는 미로가 있다.미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오.
컴퓨터는 대략 1초에 1억번의 계산을 한다. 따라서 제한시간이 1초인 경우 재귀가 1억 번이 넘어가면 시간초과가 발생한다. 이 문제에서 n은 최대 90개이기 때문에, 재귀로 문제를 풀면 2^90 번 연산을 해야 하고, 이는 1억을 훨씬 초과하기 때문에 1초 안에 문제를
상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가
상근이는 길을 걷다가 신기한 기계를 발견했다. 기계는 매우 매우 큰 화면과 버튼 하나로 이루어져 있다.기계를 발견했을 때, 화면에는 A만 표시되어져 있었다. 버튼을 누르니 글자가 B로 변했다. 한 번 더 누르니 BA로 바뀌고, 그 다음에는 BAB, 그리고 BABBA로
대구 달성공원에 놀러 온 지수는 최근에 새로 만든 타일 장식물을 보게 되었다. 타일 장식물은 정사각형 타일을 붙여 만든 형태였는데, 한 변이 1인 정사각형 타일부터 시작하여 마치 앵무조개의 나선 모양처럼 점점 큰 타일을 붙인 형태였다. 타일 장식물의 일부를 그리면 다음
어린시절 다들 한 번씩은 이름으로 궁합을 본 적이 있을 것이다. 이것과 비슷한 방식으로 중앙대학교에는 핸드폰 번호 궁합을 보는 것이 유행이라고 한다.핸드폰 번호 궁합을 보기 위해서는 먼저 궁합을 보고싶은 두 중앙대생 A와 B의 핸드폰 번호에서 맨 앞의 010과 "-"(
SELECT - extracts data from a databaseUPDATE - updates data in a databaseDELETE - deletes data from a databaseINSERT INTO - inserts new data into a da
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “(
코드의 실행 시간이 오래 걸리는 이유는? 연산량! 계산량은 '입력'과 관련이 있다. 더하기 연산 n번 + 반복문 n번 = 2n 연산에 따라 속도는 각각 다름모든 연산을 Counting할 수는 없음최악의 경우와 최선의 경우실행시간이 달라질 수 있음 - 컴퓨터, 서버의
1629번: 곱셈일반적으로 생각할 수 있는 a\*\*b%c 로 푼다면 시간초과가 뜬다. 분할 정복을 이용해서 연산의 수를 줄여준다. 참고) a\*\*b%c 는 (a%c)\*\*b%c 와 같다. 따라서 중간중간 c를 사용해 나머지를 구한 후 곱해도 결과는 같다. a, b
자료구조란 자료를 저장하는 방법론, 규칙! 효율성, 추상화, 재사용성을 만족한다면 좋은 자료구조라 할 수 있다. 보통 자료구조는 그것이 특화된 유형들이 있다. ex) 마지막에 했던 작업을 되돌릴 때 스택 사용자료구조란 개념적인 것이기 때문에 모든 언어에서 해당 자료구조
https://programmers.co.kr/learn/courses/30/lessons/77484최저 일치 개수 구하기 : 주어진 lottos (찍은 번호) 를 확인하면서, win_nums 에 들어 있는 번호와 일치하는 번호의 개수를 구한다. 최고 순위 구
https://programmers.co.kr/learn/courses/30/lessons/72410단계별로 착실하게 구현하면 되는 문제였다. 주의할 점이라면 4단계 구현 시 경우에 따라 out of range 를 만날 수도 있다는 점이다. 테스트케이스 3번
https://programmers.co.kr/learn/courses/30/lessons/81301복잡할까봐 약간 쫄았는데 생각보다 간단하게 풀리는 문제였다. 영단어 리스트를 만들어 두고, 리스트를 순회하면서 해당 단어가 주어진 문자열 안에 들어있으면 해당
https://programmers.co.kr/learn/courses/30/lessons/67256문제의 요구사항을 따라 착실하게 구현하면 되는 문제였다! 처음 시도에서는 키패드를 누른 뒤 누른 키패드의 위치로 왼손 오른손을 갱신해주는 코드를 빼먹는 실수가
https://programmers.co.kr/learn/courses/30/lessons/64061바구니 안에 담긴 인형들이 같은지 확인하는 while 문에서 실수가 있었다. len(basket)을 확인하는 코드 없이 실행하니 \[4] 처럼 원소가 하나만 남
https://programmers.co.kr/learn/courses/30/lessons/86051너무 간단한 풀이라서 올릴까 고민했다.. 0부터 9까지 반복문을 돌면서 숫자가 주어진 배열 안에 없으면 answer에 더해주었다.
https://programmers.co.kr/learn/courses/30/lessons/42862첫 번째 시도 lost 를 기준으로 체육복을 잃어버린 학생의 앞, 뒤 번호가 reserve 배열에 있는지 확인하고 제거해주었다. 70점으로 실패! 제한사항중 5
https://programmers.co.kr/learn/courses/30/lessons/42889로직을 생각하는 것 자체는 어렵지 않았다. 1부터 N에 대해서 반복문을 돌면서, 배열 안에서 현재 수보다 크거나 같은 수의 개수를 센다. 그리고 현재 수와 같은
https://programmers.co.kr/learn/courses/30/lessons/689353진법으로 변환하는 함수, 3진법을 다시 10진법으로 변환하는 함수를 각각 작성했다. 3진수를 구하는 함수에서 반복문을 다 돌고 나면 0021 처럼 뒤집힌 3진
https://programmers.co.kr/learn/courses/30/lessons/17681주어진 배열들의 원소를 각각 이진수로 변환해 하나의 행마다 지도를 구한다. 두 행 중 하나라도 1이 있는 칸이면 지도에 #를 더해주고, 그렇지 않다면 공백을 더
https://programmers.co.kr/learn/courses/30/lessons/17682문자열을 하나씩 잘라보면서 확인하고 점수 계산에 필요한 정보들을 배열에 담아 저장해주었다. 배열이 완성된 다음 반복문을 돌면서 점수 총합계를 냈다. 문자열을 자
'각 단어는 하나 이상의 공백문자로 구분되어 있다'는 것을 간과했다. 단어 사이에 공백문자는 꼭 하나일 필요는 없고 'Hello strange world' 처럼 여러 개의 공백이 들어갈 수 있고, 결과를 리턴할 때 이 공백의 개수를 유지해야 한다. 그래서 전체
드디어 2단계 진입! 🥳문제에 충실하게 구현만 잘 하면 되는 문제였다! 닉네임 변경을 반영하기 위해 uid: nickname 을 기록할 수 있는 딕셔너리 하나, 한 번 등장했던 uid 인지 여부를 파악하기 위한 uid 기록 배열 하나를 준비한다. tmp 배열에는 정답
wow 2단계 진입하자마자 풀이 시간이 2배가되엇다.. 1단계는 1시간에 6문제도풀고 그랬는데..; 2문제만 풀더라도 제대로 풀려고 노력해야겠다! 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/42586 코드
https://programmers.co.kr/learn/courses/30/lessons/43165깊이/너비 우선 탐색이라는 유형이 아니었다면 permutations 써서 풀었을 것 같다. 여기서는 문제 유형이 깊이/너비 우선 탐색으로 주어졌기 때문에 BFS
https://programmers.co.kr/learn/courses/30/lessons/72411메뉴 조합별 등장 횟수를 체크하기 위해 combinations, 딕셔너리를 사용했다. 우선 주문 하나당 만들어낼 수 있는 코스요리 조합을 combinations
https://programmers.co.kr/learn/courses/30/lessons/60058풀었는데 꺼림칙한 문제...역시나 첫 시도에서는 실패가 떴다. 이유는 괄호를 '뒤집으라'는 말을 u\[::-1] 로 이해해서였다. ( 는 ) 로, ) 는 ( 로
https://programmers.co.kr/learn/courses/30/lessons/42890
https://programmers.co.kr/learn/courses/30/lessons/42578백준에서 한번 틀렸던 문제인데 또 틀렸다.. 접근방식이 아예 다르다!! \[모자1, 모자2, 모자3], \[상의1, 상의2, 상의3, 상의4] 이렇게 있다면 종
배열 내부 데이터가 정렬되어있어야 사용 가능하다.범위를 절반씩 좁혀가며 탐색한다.시작점, 끝점, 중간점 세 개의 변수를 사용한다.데이터 개수가 천만개를 넘어가거나, 탐색 범위의 크기가 1000억 이상이라면 이진탐색 알고리즘으로 풀어야할 가능성이 높다.빠른 입력 함수를