본문 바로가기

Programming/Algorithm 193

백준 달력 /*날짜 계산하기 문제입니다.오케이 엑스와 와이가 주어집니다. 요일을 알아내는 문제입니다.31일까지 30일까지 28일까지 문제를 알아냅니다. 오케이.무슨 요일인지에 따라서 일, 월, 화, 수, 목, 금을 나타냅니다. 일단 1월 1일 부터 계산해보도록합니다. 1. 일 변경하기 예를 들어서 1월 1일이 아니고 6일 이라고 가정합니다. 그럼 ans = 6%7 = 6 이므로 월 화 수 목 금 토 일 토요일입니다. 각각 더해 주도록 합니다. 오케이2. 월 변경하기 달력 어레이를 만드는 것이 좋겠습니다. 오케이요 그런데 눈치 보여서 못하겠네,2월달 3일이면 x 가 2가 들어오므로 month[0] 만 들어가면 됩니다. */ #include using namespace std; int x, y;int ans = 0; .. 2018. 1. 25.
백준 호텔 /*2차원 배열을 만들고 그에 대해서 어떻게 접근할 것인지 문제입니다. 오늘이목요일이니, 시간을 두고 풀어나가도록 하겠습니다. 내일 몇개 내일 몇개 내일 몇개를풀면 딱입니다. 주말빼면 진짜 50일밖에 안남았네.. 덜덜 이럴 수가. 그게 진짜 시험일에맞춰둔 것입니다. 77일에서 헐. 이거 20분만에 클리어고고합니다.예제 하나만 처리하도록 하겠습니다. 기존에 행렬을 만들 필요는 없습니다.값이 정해져있기 때문에, 들어오는 숫자들에 대해서 처리하면 됩니다. 10 > 6 보다 크기 때문에새로운 N = 10 - 6을 합니다. 이것을 계속반복하는 군요 그리고 col++; 4 > 6 보다 크지 않습니다.그럼 이 4는 고스란히 row = N; 으로 됩니다.그리고 정답은 ans = row*100 + col ; */ #in.. 2018. 1. 25.
백준 행성 이동 #include #include #include using namespace std; int bruteForce(long long remaining, int speed) {int ret = 0;while (remaining > 0) {if (remaining > speed * 2){ret += 2;remaining -= speed * 2;speed++;}else {int quotient = remaining / speed;remaining -= quotient * speed;ret += quotient;speed--;}} return ret;} int main(){int cases;cin >> cases;for (int i = 0; i > x.. 2018. 1. 25.
백준 지그재그 행렬 /*아하 저렇게 옆뒤 아래로 움직이는 행렬에 대한 문제가 나오는구나, 오케이요.어떻게 처리하는지 천천히 살펴보도록 하겠습니다. 이 배열은 존재한다고 가정하고 몇번째에무엇이 존재하는지 알면 됩니다. 그럼 예를 들어보도록 하겠습니다. 아니면 움직임을 가정하고풀어보도록 하겠습니다. 저것을 저렇게 보지 말고 짝수열 홀수열 이렇게 보면 됩니다.먼저 만들어 있는 행렬이라고 가정을 하고, 짝수열, 홀수 열 이렇게 보면 됩니다.그리고 그안에서 규칙을 찾아보도록 하겠습니다.예를 들어서 먼저 어디 행렬에 속하는지 먼저 찾아보면 14번쨰는1+2+3+4+5+6+...+n 상황에서 먼저 어디에 속하는지 찾습니다.그래서 14는14-1 = 1313 - 2 = 1111-3 = 88-4 = 44>5 ? 노 이기때문에 5번째에 속하게 .. 2018. 1. 25.
백준 별찍기 /*자 다음으로 규칙 찾기 문제로 넘어왔습니다.첫째줄 오케이요.*/ #include using namespace std; int N;string star; void problemIn() {cin >> N;} void solve() {for (int i = 1; i 2018. 1. 25.
백준 크로아티아 /*단어가 주어졌을 때 몇개의 크로아티아 알파벳으로 이루어져 있는지 출력합니다.여기에 안나온 변경치는 그냥 한의 단어로 세면 됩니다. 오케이요 일단 받아보도록 하겠습니다. ljes=njak 를 받았다고 가정합니다.*/ #include #include using namespace std; string word;int ans = 0; void problemIn() {cin >> word;} void solve() {ans = word.length();for (int i = 0; i < word.length(); i++) {if (word[i] == 'l') {if (word[i + 1] == 'j') {ans--;}} else if (word[i] == 'c') {if (word[i + 1] == '=' |.. 2018. 1. 25.
백준 다이얼 /*문제를 익숙하게 풀 수 있도록, 그리고 틀린 문제는 틀리도록 내버려 둬야 합니다. 최근틀린 문제 기록해서, 그것만 다시 풀어볼 수 있도록 해야합니다. 그런데 지금은 다지는 시간이므로 다시 한번 풀어보는 시간을 가지면 좋습니다. 그리고 비슷한 문제가 나오면 생각이빠르게 나리라 생각됩니다. 다이얼 전화기를 사용합니다. 숫자를 하나 누른다음에 금속핀이 있는 곳까지 시계방향으로 돌립니다. 숫자 1을 걸려면 총 2초가 필요 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 시간을 구하는 프로그램이. 다른 숫자를 누르려면 다이얼이 원래 위치로 돌아가는 것을 기다려야합니다.오케이요. 그럼 1을 하려면 총 4초가 걸리는 것입니까? 예를 한번 풀어보도록 하겠습니다.UNUCIC 이어서 868242 인데 이것이 .. 2018. 1. 25.
문자열 입력 받기 c++ 띄어쓰기가 아니라 계속해서 문자열을 받는 것입니다. string 을 사용해서 받으면 못 받습니다. 그럼 어떻게 받아야하는가요? getline 을 써서 받아보도록 하겠습니다. /*단어의 개숫 찾기 null 포인트의 개수를 찾으면 되겠습니다. 오케이요. */ #include #include using namespace std; string word;int cnt = 0; void problem_in() {getline(cin, word);} void solve() {for (int i = 0; i < word.length(); i++) {if (word[i] == ' ') {cnt++;}} if (word[0] == ' ') {cnt--;} if (word[word.length() - 1] == ' ') {.. 2018. 1. 25.
띄어있는 알파벳 파악하기 flag 를 두어서 끝나면 1로 설정하도록 하나요? 어떻게 하나요? 보세요aa bb cc dd a 이렇게 받았다고 가정을 하빈다. 그럼 알파벳 어레이에서 숫자를 샌다고 가정을 합니다. 연속된 숫자를 기록한다음에 다시 a 를 확인합니다.그런데 flag 가 1로 되어 있습니다. 그럼 이것은 연속된 알파벳이 아님을 감지합니다.오케이 그럼 이 플래그를 1로 만들기 위해서는 어떻게 해야하나요? 먼저 a 를 입력 받고 flag = 0 입니다. 아이와 아이+1 을 비교합니다. 그래서 다르면 i 의 flag 를 1로 처리합니다. 오케이요. 그럼 가장 마지막에 있는 d 의 경우는 어떻게 처리하나요? 예를 들어 aa bb cc dd 가 들어왔다고 가정을 합니다. 그럼 flag 의 경우 1 1 1 로 닫히고 마지막 d는 그.. 2018. 1. 25.
백준 단어공부 /*알파벳 대소문자로 된 단어가 주어지면, 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램대문자와 소문자를 구문하지 않습니다. 오케이. 일단 입력을 받고이것을 숫자로 변경해야하는가? 26개 어레이를 만들어서 카운트를 올린다음에 오케이요.그런데 대문자인지 소문자 인지 어떻게 알 수 있나요. 대문자면 소문자로 변경하도록 해야하는데, 이것이 가능한가요?찾아보도록 오케이 아스키코드가 65 A 이고 97 이 a 이니까 97보다 크면 소문자입니다.이것을 대문자로 바꿔주도록 하겠습니다.97-65 = 32 같은 숫자가 있는지 어떻게 찾아볼 수 있나요?최대값은 찾을 수 있고, 최대값을 찾은 후에 같은 숫자가 있는지 찾도록 하겠습니다.*/ #include #include #include using namespace .. 2018. 1. 25.