알고리즘 89

[프로그래머스 level 1] 가운데 글자 가져오기

[출처 : 프로그래머스] 문제 문제 설명 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두 글자를 반환하면 됩니다. 제한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 예시 풀이 문자열에 대해 좀 더 제대로 이해할 수 있었던 문제였다. 문자열 포인터에 대한 개념이 명확히 세워지지 않아서 굳이 strcpy를 사용해가며 이상하게 코드를 짰다. 어쨋던 정답을 맞히고 다른 사람들 코드를 보니 문자열에 다시 공부를 해야겠다는 생각이 든다. - 처음에 짠 코드 #include #include #include // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. char* solution(const cha..

[프로그래머스 level 1] 2016년 - 요일 맞추기 문제

[출처 : 프로그래머스 사이트] 그동안 goorm 사이트에서 C문제를 풀다가 프로그래머스 사이트로 옮기게 되었다. goorm에는 종종 오류가 있는 문제도 있고, 문제 난이도가 들쑥날쑥해서 프로그래머스로 바꾸게 되었다. 사용자도 프로그래머스가 월등히 많다. 문제 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 TUE를 반환하세요. 제한 조건 2016년은 윤년입니다. 2016년 a월 b일은 실제로 있는 날..

[알고리즘 3단계] 이진 탐색(Binary Search)

[출처 : Goorm 사이트 - 웃긴 뽑기] 문제 Binary Search (이진 탐색)을 통해서 오름차순으로 정렬된 수열 내에 찾고 싶은 수의 존재 유무와 위치를 출력하는 프로그램을 작성하십시오. 이진 탐색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘입니다. 처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택하고 있습니다. 처음 선택한 중앙값이 만약 찾는 값보다 크면 그 값은 새로운 최고값이 되며, 작으면 그 값은 새로운 최하 값이 됩니다. 검색 원리상 정렬된 리스트에만 사용할 수 있다는 단점이 있지만, 검색이 반복될 때마다 목표값을 찾을 확률은 두 배가 되므로 속도가 빠르다는..

[알고리즘 2단계] 여려운 문제(정수의 각 자리수 합 구하기)

[출처 : Goorm 사이트 - Yun Goon] 문제 팩토리얼은 느낌표를 사용하여 표기하며, 다음과 같이 정의합니다. 0! = 1 N! = N * (N-1)! (단, N은 1 이상의 정수) 예를 들어 3!은 3*2*1 = 6이 되고, 10!은 10*9*8*7*6*5*4*3*2*1 = 3628800이 됩니다. 이번 문제에서는 팩토리얼을 통해 만들어진 결과 값이 두 자리 이상이면 한 자리가 될 때까지 자릿수를 더합니다. 예를 들어 3!은 6이므로 그대로 6이 되고, 10!은 3628800이므로 3+6+2+8+8+0+0 = 27까지 계산되지만 아직 한 자리가 아니기에 또 자릿수를 더한 2+7 = 9가 최종 결과값이 됩니다. 위와 같은 조건으로 계산할 때, 입력으로 N이 주어지면 N!을 구하여 결과 값이 한 ..

[알고리즘 2단계] 약수의 합

[출처 : Goorm 사이트 - 웃긴 냉면] 문제 자연수 n이 주어졌을 때 n의 약수의 합을 구하는 프로그램을 작성하십시오. 예를 들어 n이 20이라면 20의 약수는 1, 2, 4, 5, 10, 20 이므로 답은 42가 됩니다. 입력 자연수 n 출력 n의 약수의 합 풀이 약수구하는 방식 복습차원의 문제.. #include int main() { int n, sum=0; scanf("%d", &n); for(int i=1; i

[알고리즘 2단계] 방 배정하기-완전 탐색 (Brute-Force)

[출처 : Goorm 사이트 - 웃긴 뽑기] 문제 정보 초등학교 6학년 여학생들(중학교 3학년 남학생들)은 단체로 2박 3일 수학여행을 가기로 했다. 학생들이 묵을 숙소에는 방의 정원(방 안에 있는 침대 수)을 기준으로 세 종류의 방이 있으며, 같은 종류의 방들이 여러 개 있다. 정보 초등학교에서는 학생들에게 이 방들을 배정하되, 배정된 모든 방에 빈 침대가 없도록 하고자 한다. 예를 들어, 방의 종류가 5인실, 9인실, 12인실이고 6학년 여학생 전체가 113명이라면, 5인실 4개, 9인실 5개, 12인실 4개를 예약하면 각 방에 남는 침대 없이 배정이 가능하다. 또한 12인실은 사용하지 않고 5인실 10개와 9인실 7개만 사용하는 것도 가능하다. 그러나 방의 종류가 3인실, 6인실, 9인실이고 6학년..

[알고리즘 2단계] 선택 정렬(Selection Sort)

[출처 : Goorm 사이트 - 기쁜 초밥] 문제 Selection Sort는 정렬되지 않은 전체 자료들의 위치를 맞추어가며 교환하며 정렬하는 알고리즘입니다. Selection Sort를 통해 입력된 수열을 오름차순으로 정렬하면서 입력한 단계에서의 상태를 출력하는 프로그램을 작성하십시오. 입력 첫 줄에 수열의 개수 n과 진행 단계 s를 입력한다. (1

[알고리즘 2단계] 다이아몬드, 마름모 (반복문 활용)

[출처 : Goorm 사이트 - 웃긴 초밥] 문제 가장 빛나는 보석 다이아몬드를 출력하는 문제입니다. 입력한 숫자에 해당하는 줄 수 에 맞게 다이아몬드 모양(마름모)을 출력하는 프로그램을 작성해보시오. *주의사항은 입력이 짝수일 경우와 홀수일 경우의 처리입니다. 입력 자연수 (최대 100) 출력 입력한 수에 맞는 라인 수를 가진 마름모 모양 풀이 이중 반복문 연습할 때 많이 해보았던 유형이다. *로 피라미드를 만들었던 것을 잘 응용하면 될 것 같다. - 피라미드 만드는 코드 //피라미드 #include int main() { int n; scanf("%d", &n); for(int i=1; i

[알고리즘 2단계] 방 탈출하기 (퀵 정렬, 이진탐색)

[출처 : Goorm 사이트 - Yun Goon] 문제 한밤 중에 갑자기 출출해진 종수, 뭐라도 사먹기위해 편의점으로 향하던 중 괴한으로부터 습격을 받아 정신을 잃었습니다. 긴 시간이 흐르고, 정신을 차린 종수는 자신 앞에 길이가 N인 수열과 그 옆에 떨어진 메모지를 발견하였습니다. 메모지를 읽어보니 다음과 같이 쓰여있습니다. 이 방을 탈출하고 싶다면 다음 지시를 따르시오. 눈 앞에 보이는 수열을 모두 외운 후 벽에 있는 버튼을 누른다. 모니터를 통해 M개의 숫자를 하나씩 보여주면, 그 숫자가 수열에 있는지 없는지 바로 대답한다. 한 번이라도 실패하면 탈출할 수 없다. 종수는 과연 이 방을 탈출할 수 있을까요? 입력 첫째 줄에 정수 N이 주어집니다. (단, ) 둘째 줄에 수열을 구성하는 -10억 이상 1..

[알고리즘 2단계] 알파벳 빈도 구하기

[출처 : Goorm 사이트 - 심심한 튀김] 문제 이 문제는 입력된 문장에 포함된 알파벳의 빈도를 구하고 출력하는 것이 목표입니다. 대소문자 구분 없이 알파벳의 빈도를 구하는 프로그램을 작성하십시오. 입력 임의의 문장(최대 80자) 출력 알파벳 별 빈도 수 풀이 if나 switch문을 사용하면 코드가 너무 길어지니 배열과 반복문으로 간결히 만들어보자 1. 출력 부분 코드 - 아스키코드를 사용하여 알파벳의 10진수 값을 이용한다. for(int j=0; j96)alpa = input[i]-97;//소문자의 아스키 10진수값의 시작이 (a:97, b:98...) elsealpa = input[i]-65;//대문자의 아스키 코드 10진수값의 시작이 65 (A:65, B:66...) alpha_count[al..