오답노트 8

[백준 C++] 1427번 - 소트인사이드

문제:수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자. 입력:첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. 출력:첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.오답:(13) e는 숫자가 아닌 문자로 인식된다. 숫자로 바꿔주려면 ( 문자 - '0' )어째 매번 같은걸 틀리고 있는것 같다... (16) 기본적으로 sort(시작, 끝) = 작은수 ~ 큰수 → 오른차순 정렬이 된다.내림차순 정렬을 하려면 sort(시작, 끝, greater()) 써주기

코딩 2025.04.13

[백준 C++] 2751번 - 수 정렬하기2

문제:N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력:첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력:첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.오답이유: 시간초과for문으로 큰수를 뒤로보내면서 버블정렬을 해줬다. 답은맞는데 시간초과나서 실패. 벡터로 받고 sort()함수로 정렬하면 시간을 아낄수있다는 챗지피티의 조언으로 벡터로 써봤는데 그래도 시간초과가 떴다.(25) 알고보니까 endl이 성능을 잡아먹는 주범이라고 한다. 버블정렬은 안되고 벡터버전에서 "\n"으로 바꿔주니까 성공했..

코딩 2025.04.13

[백준 C++] 1152번 - 단어의 개수

문제:영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다. 입력:첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다. 출력:첫째 줄에 단어의 개수를 출력한다. 예제:1)The Curious Case of Benjamin Button62) The first character is a blank63)The last character is a blank 6오답:단어의 개수를 공백개수+1로..

코딩 2025.04.08

[백준 C++] 11720번 - 숫자의 합

문제:N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오. 입력:첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다. 출력:입력으로 주어진 숫자 N개의 합을 출력한다.오답:공백없이 숫자들을 어떻게 저장해야 할지 모르겠어서 char ch변수를 만들어 하나씩 집어넣고 그걸 또 하나씩 정수로 바꿔 더해보는걸 시도했다. 그랬더니 출력이 이상한 수가 나왔다. 문자로 각각 입력은 됐는데 (int)ch를 하면서 숫자가 아니라 아스키코드 값을 더해줘서 이상한 숫자가 나온거라 한다.ex) '5' = 53, '4' = 52, '3' = 51 위에처럼 string을 배열처럼 인덱스로 하나씩 가져다 쓸수있는것.문자를 숫자로 변환할때는 ..

코딩 2025.04.08

[백준 C++] 10871번 - X보다 작은 수

문제:정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오. 입력:첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. 출력:X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.오답:오늘 벡터를 처음배워서 한번 써봤다.입력까지는 되는데 출력이 안됐다. 7번줄에서 벡터를 선언 → 14번줄에서 직접인덱스로 접근하면 안된다고 함. (초기 크기가 0이므로 런타임 에러가 발생?)c언어처럼 for문으로 i늘려가며 배열에 값 넣으려고 했는데 c++ 벡터에서..

코딩 2025.04.01

[백준 C++] 2480번 - 주사위 세개

문제1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.3..

코딩 2025.03.19

[정올 C] 포인터 - 자가진단6

많이 틀렸었고 챗지피티 도움 많이 받았음을 미리 밝힌다.거의 한시간 고민해서 한문제 푼 셈인데 그래도 값진 시간이 되었기를... 1. 배열크기 동적설정수가 10이 넘어가면 뭔가 오류가 나나보다if문은 수가 크거나 너무 작으면 return 1로 프로그램을 끝내버리게 만들어줬다. 2. 반올림식두자리수까지 반올림이 되게 만드는 식이다.100을 곱한후 0.5더해서 int로 형변환을 해준다.형변환시 소수점 아래는 그냥 버려지고다시 100.0(실수)로 나눠줘야 소수점 두자리까지 반올림 완성 만약 두자리가 아니라면 곱하기 100이 아니려나 세자리까지였음녀 곱하기 1000 나누기 1000.0 이런식? 3. 출력 소수점30. 31번줄에 .2lf 안해주면 소수 6자리까지 나와서 틀리더라.  사실 포인터를 써보려다가 실패했..

코딩 2025.03.10

[정올 C] 포인터 - 자가진단2

겁나 많이 틀렸다. 1. 동적할당malloc 형식은 잘 모른다.자료형변환 왜 하는지 모르겠다, 일단 형식그대로 외워보려고 한다.free랑 stdlib.h 안써줘서 틀렸었다.그냥 ( stdlib.h - malloc - free ) 한 세트로 외워버리자.  2. 포인터scanf 에서 포인터 num이 그냥 &붙은 느낌의 주소를 나타내므로?그니까 8번줄처럼 그냥 이름쓰면 주소를, 10번 줄처럼 *num쓰면 값을 나타내는 것이다. 3. 연산자몫 = quotient (/)나머지 = remainder (%)영어 참고로 외워두고연산자는 자바랑 파이썬에서는 몫만 나타내는 (//)있어서 헷갈렸는데c언어에서는 (//) 그런거 없다.(/)할때 하나라도 실수면 결과가 실수로 나오고 아님 정수로 나온다고 한다.

코딩 2025.03.10