본문 바로가기
반응형

개발730

scanf로 문자열과 공백 받기 C, C++ 전체 링크 아래와 같은 input.txt가 있다고 하자. 문자열은 보통 c에서 scanf로 받지만 공백이 있는 경우는 까다롭다. scanf에 더이상 읽을 파일이 없을 경우 -1(EOF : End of File)을 return하기 때문에 txt의 끝은 알 수 있지만, input은 공백을 기준으로 file 입력을 끊어버린다. #include int main(void) { char input[100]; while(scanf("%s", input) != EOF) { printf("%s\n", input); } return 0; } 공백을 기준으로 input에 read 되는 것을 알 수 있다. 이러한 점을 방지하기 위해, scanf에 " %[^\n\r]" 옵션을 넣어주면, 공백을 무시하고 한 줄을 입.. 2021. 3. 16.
소수 판단 함수 C, C++ 전체 링크 참고 - 에라토스테네스의 체 - 소수 판단 어떤 수가 소수인지 판단하는 방법은 나눠떨어지는 수가 있는지 직접 나눠보면 된다. 예를 들어 13을 소수인지 아닌지 판단해보자. 1로 나누는 것은 의미가 없으므로, 2부터 나눠보자. 13 / 2 는 나눠떨어지지 않는다. 13 / 3 는 나눠떨어지지 않는다. 13 / 4 는 나눠떨어지지 않는다. ... 13 / 12 는 나눠떨어지지 않는다. 따라서 13은 소수이다. 하지만 이 과정을 다 해볼 필요는 없다. 2 부터 12까지가 아니라 √13까지만 나눠보면 된다. 만약 √13보다 작은 수에서 나눠 떨어지는 수가 있다면 √13보다 큰 수에서도 나눠떨어지기 때문이다. c/c++에서 math 함수를 이용하면 루트를 계산할 수 있지만, 라이브러리를 사.. 2021. 3. 14.
C, C++ - 정수로된 FILE 입력 C, C++ 전체 링크 C, C++에서 FILE을 정수로 된 FILE을 읽어보자. input.txt는 아래와 같다. 코드는 아래와 같다. #include #define INPUT_FILE "input.txt" int main(void) { FILE *fp = fopen(INPUT_FILE, "r"); if (fp == NULL) { printf("Wrong Input : %s\n", INPUT_FILE); return 0; } int input; while (fscanf(fp, "%d", &input) != EOF) { printf("%d\n", input); } return 0; } input.txt file을 define으로 정의해서 다른 코드에서도 관리하기 쉽도록 한다. FILE pointer fp.. 2021. 3. 14.
유일한 수 두개 알고리즘 문제 전체 링크 judge.koreatech.ac.kr/problem.php?id=1074 유일한 수 문제의 응용 버전이다. 모든 수가 짝이 있으나 단 2개의 수만 짝이 없다. 유일한 수 문제대로 풀면 짝이 있는 수는 자연스럽게 제거할 수 있지만, 짝이 맞지 않는 두 수가 xor 연산되어 있어서 답을 구할 수 없게 될 것 같다. 하지만 여전히 xor 연산을 이용해서 문제를 해결할 수 있다. 먼저 두 수가 다르다는 것은, 최소 1 bit가 다르다는 뜻이 된다. 즉, 모든 N을 xor한 후, 어떤 다른 1 bit를 기준으로 1 bit가 있는 경우는 on에 xor을 1 bit가 없는 경우는 off에 xor을 하면 두 수가 분리된다. 예를 들어서 두 수가 3과 7이라고 하자. 0011(3)과 0111(.. 2021. 3. 1.
C, C++ - 최하위 / 최상위 비트 구하기 (Find MSB, LSB) C, C++ 전체 링크 삼성 C형 전체 링크 참고 - 비트 단위로 출력하기 다음과 같은 비트가 있다고 가정하자. 0010 0000 1100 0010 그러면 최하위 비트(Least Significant Bit)와 최상위 비트(Most Significant Bit)는 아래와 같다. 0010 0000 1100 0010 0000 0000 0000 0010 → 2 : 최하위 비트 (LSB : Least Significant Bit) 0010 0000 0000 0000 → 8192 : 최상위 비트 (MSB : Most Significant Bit) 최하위 비트 구하기 최하위 비트 추출법은 매우 간단하다. int lsb = x & (-x); // int lsb = x & (~x + 1) 2의 보수를 구하는 방법이기도.. 2021. 3. 1.
유일한 수 알고리즘 문제 전체 링크 judge.koreatech.ac.kr/problem.php?id=1007 문제의 조건을 보면 홀수개의 숫자가 입력이 되고, 그 중 단 하나만 다르다. 따라서 bit 연산 ^(xor)을 누적하면 단 하나의 숫자만 남게 된다. 어떤 숫자 N에 숫자 M bit를 반전시키고, 다시 M bit를 반전 시키면 N이 되기 때문이다. ( N = N ^ M ^ M ) 따라서 0부터 시작해서 누적하면 짝이 있는 숫자들은 자연스레 사라지게 된다. #include int T, N; int main(void) { scanf("%d", &T); for (int tc = 0; tc < T; tc++) { int ans; scanf("%d", &N); ans = 0; for (int i = 0; i < N.. 2021. 3. 1.
JavaScript test setting 자바스크립트 전체 링크 index.html index.js console.log("hello"); 2021. 2. 19.
Visual Studio 실행 시간 확인 방법 참고 - chrono를 이용하여 Visual Studio 실행 시간 microseconds로 확인하기 time.h를 이용하면 자신의 코드 제출 시간을 알 수 있다. 하지만 삼성 SW 시험에서는 컴파일러 옵션이 다르기 때문에 Visual Studio의 실행 시간을 그대로 믿어서는 안된다. #include #include int main() { int TESTCASE = 1000; int TIME = 0; /* Timer on */ clock_t start = clock(); /* 실행 코드 */ for (int tc = 1; tc 2021. 2. 15.
알고리즘 테스트 용 Visual Studio Setting 방법 (2) 참고 - Visual Studio Setting : input.txt 입력 보통 디버깅을 하면 printf를 찍는다. 그런데 printf가 많아지면 콘솔 창으로 모두 보기 힘들다. 이럴 경우, file로 저장해두면 디버깅 하기 편하다. 그럼 output.txt로 출력 값을 받도록 설정해보자. 1) Project -> 속성 -> 구성 속성 -> 디버깅 - 명령 인수 에서 ">output.txt" 를 입력하자. input은 직접하고, 출력만 하고 싶다면 >output.txt만 설정하면 된다. 2) 리소스 파일 -> 추가 -> 새 항목 선택. output.txt를 만든다. 여기서도 당연히 명령 인수에 입력한 파일명과 같아야 한다. 3) Ctrl + F5로 빌드를 실행하자. 콘솔 창에는 아무 출력값이 없고, o.. 2021. 2. 6.
반응형