본문 바로가기

Algorithm

(39)
[99클럽] 코딩테스트 스터디, 7일차 TIL - 비기너 1. 문제풀이1) 문제, 근무 지옥에 빠진 푸앙이 (백준, 25593)군대에 간 푸앙이는 4 교대 근무를 서게 된다. 근무 시간대는 08:00~12:00, 12:00~18:00, 18:00~22:00, 22:00~08:00 으로 각각 4, 6, 4, 10시간의 근무로 구성되어 있다.푸앙이와 동기들은 근무 시간이 최대한 공평하게 배분되기를 원한다. 그래서 근무표 전체에서 각 인원의 근무 시간이 12시간 이하로 차이 나게 해서 최대 50주 치 근무표를 짜려고 한다.푸앙이는 원래 똑똑해서 이 정도는 한눈에 계산이 가능했지만 어째서인지 푸앙이는 계산이 불가능해졌다. 푸앙이를 위해서 대신 근무표가 공평한지 계산해 주자. 입력- 첫 번째 줄에 주의 개수인 N이 입력된다. (1≤N≤50)- 둘째 줄부터 근무표가 주어..
[99클럽] 코딩테스트 스터디, 6일차 TIL - 비기너 1. 문제풀이1) 문제, 전주 듣고 노래 맞히기 (백준, 31562)윤수와 정환은 「전주 듣고 노래 맞히기」라는 게임을 할 예정이다. 「전주 듣고 노래 맞히기」는 주어진 노래의 전주를 듣고 먼저 제목을 맞히는 사람이 점수를 얻어 최종적으로 점수가 더 많은 사람이 이기는 게임이다. 절대 음감을 가진 윤수는 노래의 첫 네 음만 듣고도 어떤 노래든 바로 맞힐 수 있다. 따라서, 정환은 윤수를 이기기 위해 첫 세 음만으로 노래를 맞히게 해주는 프로그램을 만들려고 한다. 우선 정환이 알고 있는 노래 제목, 음이름 등을 데이터로 만든 뒤 프로그램을 구현하기 시작했다. 예를 들어, 다음은 TwinkleStar(반짝반짝 작은 별)의 악보 중 일부이다. 위 악보를 박자와 관계없이 음이름으로 표현하면 CCGGAAG가 된다..
[99클럽] 코딩테스트 스터디, 5일차 "모스부호" TIL - 비기너 (feat. 백준에서 자바스크립트 사용하기) 1. 문제풀이1) 문제, 모스 부호 (백준, 29701)혜민이는 요즘 모스 부호에 관심이 많아졌다. 모스 부호는 짧은 신호와 긴 신호를 적절히 조합하여 문자 기호를 표기하는 방식이다. 각 문자를 나타내는 방식은 미리 정해져 있는데, 예를 들어, 짧은 신호를 '.', 긴 신호를 '-'로 나타낸다면, 모스 부호로 알파벳 'A'는 '.-', 숫자 1은 '.----'와 같이 표기할 수 있다. 모스 부호를 알고 있으면 위험한 상황에서 구조 요청을 하는 데 유용할 것 같아, 혜민이는 평상시에 친구들과 연락을 주고받을 때도 모스 부호를 사용하려고 한다. 혜민이는 친구들이 보내온 모스 부호를 올바르게 해독했는지 바로바로 확인하고 싶어졌다. 알파벳 A-Z, 숫자 0-9, 기호 ',', '.', '?', ':', '-',..
[99클럽] 코딩테스트 스터디, 4일차 TIL - 비기너 1. 문제풀이1) 문제 : 숫자 문자열과 영단어, 프로그래머스네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. - 1478 → "one4seveneight"- 234567 → "23four5six7"- 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해 주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다. 제한사항- 1 ≤ s의 길이 ≤ 50- s..
[99클럽] 코딩테스트 스터디, 3일차 TIL - 비기너 1. 문제풀이1) 문제 : 문자열 나누기, 프로그래머스문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.  - 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다.- 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.- s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. 문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를..
[99클럽] 코딩테스트 스터디, 2일차 TIL - 비기너 1. 문제 풀이1) 문제 :  크기가 작은 부분 문자열, 프로그래머스 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return 하는 함수 solution을 완성하세요. 예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개입니다.  2) 해석 - t에서 p와 길이가 같은 부분문자열 찾기- t부분 문자열이 p의 숫자보다 작거나 같은 숫자의 횟수 return   3) 풀이function solution(t, p) ..
[코딩테스트] minSubArrayLen, 슬라이딩 윈도우 알고리즘 문제. 슬라이딩 알고리즘 - MinSubArrayLen  위 문제는 주어진 배열의 합이 숫자랑 같거나 큰 경우, 해당 배열합의 최소 길이를 반환하는 문제이다. 즉, array와 sum이 주어지면 array 요소의 합이 sum보다 크거나 같은 최소 길이를 반환하면 된다.이때 array 요소는 인접한 요소여야 한다.  슬라이딩 윈도우 알고리즘을 통해 해결해야 하며, 시간복잡도는 O(n) 공간복잡도는 O(1)이여야 한다. 처음에 어떻게 풀어야 할지 감이 안왔다. while문을 이용해서 한 칸씩 늘려가야 겠다는 생각을 하긴 했는데, 어떻게 늘려가야 하지? 라는 고민이 계속 들었다.  결국 시간이 지나도 문제를 맞추지 못해서 답안을 확인했다.  *슬라이딩 윈도우 알고리즘 : 배열의 한 부분을 정의하고, 이 부분을..
[2주만에 통과하는 알고리즘] 파이썬 입력과 출력 / 반복문과 조건문 1. 입력과 출력 #입력 #input() = 사용자한테 입력 받은것을 출력함 #case1 : 단순 정수 number = int(input()) #case2 : 단순 문자 #input default type = 문자열 타입 string = input() #출력 print(number + number) #24 print(string + string) #1212 파이썬에서 input은 기본적으로 string으로 받아오기 때문에 input()만 사용하면 string type이 된다. 만일 정수를 받아오고 싶다면 input을 int로 감싸줘야 한다. > int(input()) 숫자와 숫자를 더하면 두 값을 합한 값이 출력되지만, 문자열을 더하면 두 값을 나열한 형태로 출력된다. 1) map, split #map ..