본문 바로가기

전체 글28

백준 2456 나는 학급회장이다. C언어_230131 이 문제를 어떻게 해결할까 고민하다가 한 명 한 명의 투표를 받아오면서, 각 후보의 합산점수와 3을 받은 횟수를 따로 저장하였다. (항상 생각하지만 더 좋은 방법으로 푸는 법이 분명 있을 것이다.) 그 후에 합산점수 max와 3을 받은 횟수 max 변수로 최댓값을 찾은 후 루프를 돌려가면서 해당되는 값을 찾아서 출력해 주었다. max값이 1개라면 바로 그 친구를 출력, 아니라면 다시 조건을 붙여서 3을 받은 횟수를 비교 후 순위를 나눈 수 있는 경우와 없는 경우로 나눠서 출력해 주었다. 변수를 많이 지정하긴 했지만 구현이 어렵거나 어려운 문제는 아닌 것 같다! #include int main(void) { int n,a,b,c; int sum[10]={0},index[10]={0},max=0,max_in.. 2023. 2. 1.
백준 2641 다각형그리기 C언어_230201 달팽이나 다각형 그리기 같은 문제는 case별로 회전 및 check를 다 해줘야 해서 내 기준에선 까다로운 문제다. 매번 변수초기화를 적절한 데서 해주지 못해 출력이 이상하곤 했다. 오늘도 한 이틀 고민한 문제다. 항상 코딩을 하면서 느끼지만 내가 푸는 풀이 외 정말 다양한 풀이가 있을 수 있다고 생각한다. 나도 구현가능한 두가지 방법을 고민하다가 하나로 풀긴 했다. 대신 이 방법의 단점은 메모리를 많이 사용한다. 이중배열과 변수를 많이 선언했기 때문 ㅠㅠ 더 열심히 배워서 간단하게 구현할 수 있도록 노력해야겠다. 아무튼 코드로 돌아가서, 나는 입력받은 base 다각형을 총길이(개수)를 1씩 로테이션하는 배열과 역방향으로 로테이션하는 배열을 만들어서 하나의 배열에 저장하고, 인풋이 그 배열에 들어있는 값.. 2023. 2. 1.
백준 2304 창고다각형 C언어_230124 창고다각형 문제다. 난이도가 높아질수록 문제가 길어지고 복잡해진다. 그래서인지 코딩을 하면서 국영수가 다 부족하단 걸 깨닫고 있다.... 처음에는 문제접근을 이중배열을 선언하여 창고영역에 해당하는 부분을 1로 채워서 가산하고자 했다. 하지만 풀수록 더 복잡해진다는 것을 깨닫고 풀이 방법을 바꿨다. 배열값에 해당하는 값을 일단 저장하고 제일 큰 다각형 기준으로 좌우를 나눠 구현하였다. #include #include #include #define swap(x,y) {int z=x;x=y;y=z;} int a[2000]={0}; int main(){ int n,l,h; int max=1, min=1000; int sum=0,num=0,keep=0; scanf("%d",&n); for(int i=0;ih?nu.. 2023. 1. 25.
백준 16463 13일의 금요일 C언어_230123 실버문제는 아직 나에게 조금 어려워서 구글검색을 하면서 해법에 대한 힌트를 얻곤 한다. 이 문제는 그래도 내 힘으로 풀어보고자 하여 (윤년 구하는 문제를 종종 푼 적이 있다.) 거의 한 시간 반? 공들여서 풀었다. 문제의 핵심은 윤년에 대한 처리와 19년 1월 1일이 화요일이라는 것이다. 구현과 디버깅을 위해 종이에 13일의 금요일이 포함된 달을 다 표기하고 요일을 계산하기 위한 규칙을 찾기 위해 하나하나 그려보았다. 다른 쉬운 방법도 물론 있겠지만 나는 switch-case 문으로 구현하였다. 풀고 나서 찾아보니 그냥 배열에 저장하면 됐었지만 기억을 되새겨 풀어보았다고 위로해 본다. #include #include #include #define swap(x,y) {int z=x;x=y;y=z;} int.. 2023. 1. 24.
백준 2670 연속부분최대곱 C언어_230119 c를 배우던 초기에 코딩테스트에서 1시간 동안 구현해도 실패했던 문제이다. 지금은 10분? 정도 안 걸려서 구현한 것 같다. 핵심은 double 형 사용 및 적절한 순간에 초기화와 비교인 것 같다. 막상 짜보니 엄청 간단한 코드인데 왜 그때는 어렵게 풀었을까.. 나는 입력을 배열로 받은 다음에 이중반복문을 통해 j=i와 같을 때부터 하나씩 곱해가면서 최댓값을 찾았다. 그다음 바깥 반복문에서 안쪽에서 구한 max값과 바깥의 max2를 비교하여 더 큰 값을 max2에 저장하였다. 그 후 max2값을 출력하면 끝! #include #define swap(x,y) {int z=x;x=y;y=z;} int main(){ int n; double a[10010],max,max2=0,mul; scanf("%d",&n.. 2023. 1. 19.
백준 2581 소수 C언어_230119 소수문제는 항상 1을 처리해 주는 과정에서 틀리곤 한다. 이번에도 첫 시도에서는 1을 처리해주지 않아 틀렸었다. 그래서 추가한 조건이 if(m==1) m=2;!! 1이 들어온다면 1은 검사할 필요가 없으므로 2를 대입해 주었다. 그나저나 수행시간이랑 메모리가 좀 크게 나와 줄이는 방법을 차차 검색해야겠다. #include #define swap(x,y) {int z=x;x=y;y=z;} int main(){ int m,n; int a[100000]; int sum=0; scanf("%d %d",&m,&n); if(m==1) m=2; //printf("%d\n",m); for(int i=m;i 2023. 1. 19.
백준 2839 설탕배달 C언어_230119 신기하다. 내가 좀 발전했나 보다. 2달 전 처음 C언어를 배우면서 이 문제를 풀었을 땐 장렬히 실패를 맛보고 나는 코딩이 맞지 않아라는 생각을 했었다. 하지만 2달이 지나고 계속해서 다른 문제를 풀다가 다시 이 문제를 풀었을 때 생각보다 구현이 쉬웠던 문제구나라는 생각으로 바뀌었다. 간단히 루프를 통해 구현이 가능한 문제이다. 봉지 수를 적게 가져가려면 담을 수 있는 용량이 큰 5kg짜리에 많이 담으면 된다. 그래서 5kg 봉지는 점점 줄여가면서, 3kg 봉지는 늘려가면서 나머지를 구하고 나머지가 0이 되지 않는다면 담을 수 없으므로 -1을 출력한다. 나 자신 뿌듯해!! 혹시 이 글을 읽고 있는 사람이 있다면 열심히 공부하면 다 풀 수 있다고 말해주고 싶다. #include #define swap(x,.. 2023. 1. 19.
백준 7568 덩치 C언어_230118 실버문제면 어려울 거라 생각하고 겁먹는 것부터 바꿔야겠다. 배열에 각 값을 저장하고 등수를 저장하는 배열을 별도로 만들어서 만약 조건에 부합하지 않는다면 등수를 1 더하여 뒤로 민다. 문제에서 키와 몸무게 둘 다 커야지 등수가 높아지므로 and조건으로 조건을 걸어주었다. 메모리와 시간제한도 여유가 있으므로 다음과 같이 선언해도 문제가 없는 것 같다. #include #define swap(x,y) {int z=x;x=y;y=z;} int main(){ int n; int w[100],h[100],a[100]; scanf("%d",&n); for(int i=1;i 2023. 1. 18.
백준 2822 점수계산 C언어_230118 실버라서 겁먹은 문제지만 어렵지 않았다. 숫자도 몇 개 없어서 반복문을 맘껏 써도 돼서 좋은 문제였다 하하 문제를 풀면서 느낀 거지만 swap함수는 저렇게 define으로 사전 정의를 해두면 문제 풀기 훨씬 간편해진다. 문제는 간단히 a배열을 입력받으면서 동일한 값을 b배열에 넣어두고 b배열만 크기순으로 정렬하여 a에서의 위치를 출력해 주었다. 중간에 5개의 합을 먼저 출력해주어야 하여 별도 반복문을 통해 출력해 주었다. #include #define swap(x,y) {int z=x;x=y;y=z;} int main(){ int a[10],b[10]; int sum=0; for(int i=1;i 2023. 1. 18.
백준 9437 사라진 페이지 찾기 C언어 230118 간단하게 if-else문으로 문제를 풀었지만 다른 방법이 있을까? 출력에 순서만 맞춰주고 8쪽의 경우 1~8 값을 넣어봤을 때 이상이 없으면 ok 되는 것 같다. #include #include int main(){ int n,p; while(1){ scanf("%d",&n); if(n==0) break; scanf("%d",&p); //if (n==p) printf("%d %d %d\n",n-p+1,n-p+2,p-1); if(p%2==0){ if(p 2023. 1. 18.