프로그래밍 32

6. 백준 1193 분수찾기 분명 어려운 문제가 아닌데 어렵다 -C 언어

이 지그재그 문제 처음 봤을 때 어떻게 굴러가는지 전혀 이해가 되지 않았다. 정말로 이 문제를 풀수 있나하면서 그림까지 그리고도 이해가 되지 않아 아래에 다시 정렬해본 후에야 이해가 되었다 분모 분자 각각 서로 떨어져서 계산해야 하는데 문자는 홀수까지 켜졌다 1까지 작아지고 다시 그 다음 홀수까지 켜졌다 작아진다. 분자는 1(홀수 최대) -> 1 -> 2 -> 3(홀수 최대) ->2 -> 1 -> 1 -> 2 -> 3 -> 4 -> 5(홀수 최대)이런식이로 분모는 1 -> 2(짝수 최대) -> 1 -> 1 -> 2 -> 3 -> 4(짝수 최대) 이런식으로 늘어나게 된다. 또 다른 풀이방법도 물론 있겠지만 아직을 여기까지가 내 한계였다. 위의 증명을 토대로 작성한 결과 뭔가가 틀어져서 맞긴 맞지만 애매하게..

1. 1과목 제 1장 데이터 모델링의 이해 - 자격증 도전기

리눅스마스터라는 큰 산을 해치운 나는 이번엔 sqld에 도전하고자 한다. 아예 sqld에 대해 하나도 모르던 나에겐 처음엔 너무 어렵게 다가왔지만 최근에 그저 이게 sql이란 프로그램 사용법이란 것을 깨달은 나는 부담을 털어버리고 일단 부딪쳐보기로 한다. 1과목인 이론은 처음봤을 때 굉장히 어려웠으나, 문제들은 생각보다 그리 어렵지 않았고 노랭이 제 1장을 풀어본 결과 30개중 15개를 맞췄다. 문제중 다시 찾아봐야했던 개념들을 다시 모아보자면, 데이터모델링 개념 개념적 - 추상화 수준이 높고 업무중심적, 포괄적 수준의 모델링 논리적 - 정확하게 표현, 재사용성 높음 물리적 - db에 이식할 수 있도록 성능, 저장 등 물리적인 성격을 고려하여 설계 데이터베이스 스키마 구조 3단계 외부스키마 - 개별 사용..

표준 입출력 함수와 문자열 함수(엔터키 무시, 외울 함수 많음) -C언어

짜잔! 내가 제일 싫어하는 문자열 시간☆ 문자를 두개 이상 입력해야 할때 #include int main(){ char a,b; scanf("%c",&a); scanf("%c",&b); printf("%c\n%c",a,b); } 이렇게 작성해버리면 입력할때 누른 [enter]키도 아스키코드에 들어가는 '문자'이기 때문에 자동으로 b에 입력이 된다. 여기서 해결방법은 크게 두가지가 있는데 하나는 #include int main(){ char a,b; scanf("%c",&a); scanf(" %c",&b); printf("%c\n%c",a,b); } 와 같이 뒷 코드에 스페이스바로 간격을 만들어 주는 것이고 *여기서 주의할점은 scanf(" %c",&a);이렇게 작성해버리면 [엔터]a[엔터]b로 입력해야 ..

1. do it! 자료구조와 함께 배우는 알고리즘 입문 - c언어

요즘 백준 문제만 무작정 풀기엔 코딩 활용 능력은 점점 좋아지고 있지만 프로그래밍에 대한 기초 지식이 부족해서 문제를 못풀겠다는 느낌도 들고 코딩에서 알고리즘이 굉장히 중요하다는 말에 유명한 알고리즘 관련 책들을 2,3개 샀지만 내가 이해하기엔 조금 난해한 책들이 많아 기초부터 해야겠다는 생각에 이 책을 사게 되었다. 1챕터인 기본 알고리즘을 풀고있는데 이 단원은 기본이다보니 그리 어렵지 않았기에 블로그에 안올리려고 했으나 연습문제 푸는 와중에 3항 연산자라던가 평소에 쓰던 반복문을 다른 방식으로 사용하는 것이라던지 재미있는 사용방법이 떠올라 이렇게 작성하게 되었다. chap 1. Q11 - 자릿수를 출력하는 프로그램에서 평소에는 #include int main(){ int a,b=1; scanf("%d..

4. 백준 15596 정수 n개의 합 구하기 (문제를 잘 읽자,사용자정의함수배열)- c언어

처음 이 문제를 봤을때 이해가 전혀 되지 않았다. 보통 문제로 바로 해결방법을 알아차리기 보단 예제 입력 & 출력을 보고 문제를 파악하는 편인데 이번 문제에선 그런게 전혀 나오지 않았다. 그러는 와중에 이 단계의 다른 문제들은 이미 성공이라고 되어있기에 어떤 형식의 문제인가 싶어 봤더니.... 기초 문법떼기 리스트에서 가장 마지막에 있던 문제이자 가장 애를 먹었었던 셀프넘버가 그밑에 있었다....... 이를 발견함과 동시에 정말, 매우, 자신감이 떨어졌지만 일단 부딪쳐보기로 했다. 예제 입력이 어떻게 되는지도 모르겠고 감이 아예 안잡히지만 일단 무작정 코드를 써보기로 했는데 #include int main(){ long long n, hap=0; while(scanf("%lld",&n) ==1){ hap..

3. 백준 3052 나머지 겹치지 않는 숫자 구하기 - c언어

이번 백준문제는 10개의 수를 받고 42로 나눈 나머지 숫자중 안겹치는 숫자의 개수를 세는 문제이다 사실 이 문제는 저번에 풀려고 한번 도전 했었으나 나머지 숫자중 겹치는 숫자를 알아내는 방법을 모르겠어서 포기한 문제였고 이후에 1.백준 8958번인 ox퀴즈도 연달아 틀리게 되어 나에게 깊은 패배감을 주었던 문제이다. 이후 방학때 적어도 백준 하루에 한 문제씩 풀자라는 결심을 하게 되었고 2. 백준 4344 평균은 넘겠지 문제를 통해 자신감을 되찾은 나는 다시 이 문제에 도전을 하게 되었다. 전에 겪었던 굴욕을 다시 마주하게 된 나는 쪼큼 걱정을 하게 되었지만 그 걱정이 무색하게 간단하게 문제가 풀렸다. 일단 처음엔 기초 베이스인 수를 42로 나눈 나머지를 변수에 저장하고나니 겹치는 숫자를 판단할 만한 ..

2. 백준 4344 평균은 넘겠지(feat.%프린트 하는 방법) - c 언어

이미 백준의 단계별로 풀어보기중 1차원 배열 문제에서 두번의 패배를 맛본 나는 더이상 물러날 곳이 없었다. 마음을 다독이며 새로히 도전한 문제는 바로 4344 평균은 넘겠지 이 문제는 처음에 '케이스의 개수'를 던져준 다음 '학생의 수'를 주고 학생의 수 만큼 '점수'를 주어 평균을 내고 '평균 이상인 학생'을 퍼센트로 나타내는 문제이다. 그다지 어려운 문제도 아니고 문제가 반복 개수와 변수의 수도 알아낸 이상 바로 도전해보기로 했는데 우선 가장 기본적인 반복문을 한 케이스당 학생의 수 만큼 반복하는 식과 받은 점수를 합산하여 평균을 내는 식을 만들어 주었고 이상은 없었다. 평균 이상인 학생도 배열을 사용하여 cnt로 인원을 세주었고 cnt는 소수점 자리도 나타내야 하기 때문에 float로 변수 선언을 ..

표준 라이브러리의 선행 처리기 -C언어

드디어 새로운 챕터인 표준 라이브러리에 들어가게 되었다. 새로운 챕터이니 만큼 새로운 지식을 머리속에 집어넣어야 한다는 압박감을 잠시 느꼈지만 그 걱정이 무색하게 선행처리기의 내용은 정말 별것 아니었다. 처음 c언어를 쓰게되면 거의 무조건적으로 #include 와 를 써야하는 데 이 챕터에서 왜 이 헤더파일을 사용해야 하는가에 대해 잠깐 짚고 넘어갔다. 그러면서 입력받은 알파벳가 대,소문자인지 가려내고 이를 대->소 , 소 -> 대 로 변환하는 프로그램을 잠깐 만들어 보았는데 별 내용은 아니었고 그냥 엑셀에서 함수를 사용해 대소문자를 변환하는 것과 비슷했다. #include //알파벳 변환 함수 헤더 int main(){ ... if(isupper(op)) //알파벳 대문자를 판단하는 함수 op = to..

와! 구조체! 신세계! (짤막한 포인터) -C언어

현재 방학인 틈을 타 알고리즘 마스터가 되기를 원했지만, 프로그램밍 실력은 그저 작은 지식들을 돌린다고 만들어지는게 아닌지라 일단 기초 c 언어의 지식을 늘리기로 했다. 그래서 일단 가지고 있는 프로그램 교재를 한번 전체적으로 한 챕터씩 훑어보기로 했는데 이 전 챕터였던 포인터는 사용 방법을 잘 모르겠다. 포인터에 대해 이해한 내용이라곤 변수를 선언할때 앞에 *를 붙이고 ex) int *po, a=20; po=&a; 를 했을때 po = (a의 주소) *po = 20 만약에 po++을 했을때 (a의 주소)+1이 되는게 아니라 int 메모리의 한칸의 용량인 +4되는것이다 이 이상은 포인터를 왜 사용하는지 이해가 잘 안되었다 그 이후에도 역경은 있었으니 바로 구조체였다. 처음 보는 문법에 도대체 이런것을 왜 ..