2020. 6. 19. 18:23
728x90

1. 숫자의 끝에 0이 붙는다는 것은 그만큼 10을 곱했다는 소리다.

2. 10 = 2×5. 소인수의 경우 2보다 5가 차지하는 비율이 적다. 따라서 소인수 5의 개수만 구할 수 있으면 된다.

3. 팩토리얼을 구성하는 소인수 5의 개수는 n/5를 반복해서 합산하는 것으로 구할 수 있다.

    • 첫 번째 n/5는 5^1가 있는 수
    • 두 번째 n/5는 5^2가 있는 수
    • 세 번째 n/5는 5^3가 있는 수
    • 예시) 75!의 경우 75/5 = 15이고, 15 / 5 = 3이므로 0의 개수는 18개가 된다.

4. ×5의 개수를 구하는 코드는 아래와 같다.

void FactorialTrailingZeroes(int n)
{
	int ret = 0;
	while(n > 0)
	{
		ret += n / 5;
		n /= 5;
	}
	return ret;
}


※ 재귀함수로 구현한다면 한 줄로도 구현할 수 있다.

void FactorialTrailingZeroes(int n)
{
	return n < 5 ? 0 : trailingZeroes (n / 5) + n / 5;
}


728x90

'공부 > 문제풀기' 카테고리의 다른 글

백준 15740 - A+B - 9  (0) 2019.10.11
백준 10953 - A+B - 6  (0) 2019.10.11
프로젝트 오일러 문제 19  (0) 2019.10.08
백준 2558 - A+B - 2  (0) 2019.09.24
백준 2156 - 포도주 시식  (0) 2019.08.26
Posted by 아야카
2019. 12. 15. 13:27
728x90

1. Windows 기능 켜기/끄기에 진입한다.

 - 방법 1
   Windows 설정 > 앱 > (우상단) 프로그램 및 기능 클릭
   좌상단에 있는 Windows 기능 켜기/끄기 클릭


 - 방법 2
   실행 창에 OptionalFeatures.exe를 입력


2. '인터넷 정보 서비스'에서 아래 항목을 체크한다.

 - World Wide Web 서비스
 - 웹 관리 도구 > IIS 관리 콘솔


3. 응용 프로그램 개발 기능에서 자신에게 필요한 항목을 체크한다.
 - 인터넷 정보 서비스 > World Wide Web 서비스 > 응용 프로그램 개발 기능


4. 실행
 - 시작 > Windows 관리 도구 > IIS(인터넷 정보 서비스) 관리자 실행
 - 왼쪽 트리를 열어 Default Web Site 선택
 - 오른쪽 웹 사이트 관리에서 '시작' 클릭


728x90

'공부 > 기타' 카테고리의 다른 글

티스토리에서 syntaxhighlighter 3.0.83 설치하기  (2) 2019.10.01
자료구조 2장. 연습문제 05  (0) 2018.07.25
자료구조 2장. 연습문제 04  (0) 2018.07.25
자료구조 2장. 연습문제 01  (0) 2018.07.25
xor을 이용한 스왑  (0) 2018.03.20
Posted by 아야카
2019. 10. 11. 20:20
728x90

문제 번호: 15740

문제 제목: A+B - 9

문제 주소: https://www.acmicpc.net/problem/15740


문제 내용

입력받은 두 수 A, B를 합한 결과를 출력한다.


테스트 케이스

1 2

3

-60 40

-20

-999999999 1000000000

1

1099511627776 1073741824

1100585369600

123456789123456789123456789 987654321987654321987654321

1111111111111111111111111110


문제 풀이

 문자열로 입력 받아서 덧셈을 하는 코드를 짠다. 주의사항은 아래와 같다.
 - 양수에는 부호가 없지만, 음수에는 - 부호가 있다.
 - 부호가 같으면 덧셈, 부호가 다르면 뺄셈을 한다.
 - 0은 항등원이므로 입력값에 0이 포함되는 경우에는 연산을 할 필요가 없다.

 일단 양수, 0에는 부호가 없으므로 이런 숫자가 입력으로 들어오면 앞에 +를 붙여준다.

 덧셈은 각 자리를 합한 뒤 10이 넘으면 다음 자리에 +1을 하고, 현재 자리에 10을 빼기만 하면 된다.
 뺄셈은 계산 결과에 따라 추가적으로 처리해야 할 것들이 있다.내 경우에는 아래와 같은 순서로 진행하였다.
 1. 음수인 배열의 각 자리에 -1을 곱한다.
 2. A와 B의 각 자리를 합한다.
 3. 합한 결과의 맨 앞이 0인 경우 0이 아닌 수가 나올 때까지 제거한다.
 4. 맨 앞의 수가 0보다 작은 경우 부호를 -로 하고 각 자리에 -1을 곱한다. 아닌 경우에는 부호를 +로 한다.
 5. 일의 자리부터 시작하여 0보다 작은 경우 앞의 자리 수를 1 빼고, 현재 자리 수에 +10을 한다.
 6. 조정 후 3.의 처리를 추가로 진행한다.

마지막으로 결과 출력이 char로 이루어지므로 각 자리에 '0'을 더해줘 정상적으로 출력될 수 있게 하고, 부호가 +일 경우 이를 제거해준다.


2019. 11. 05 - 0에 대한 예외처리 추가
 기존: 값이 0일 때도 연산 진행
 변경: 입력 값에 0이 포함되는 경우 다른 값을 반환

2019. 10. 21 - 앞에 위치한 0 제거 코드 수정
 기존: 맨 앞이 0인지 확인하여 erase. 0의 개수만큼 erase 함수 반복.
 변경: 맨 앞이 0일 경우 연속으로 0이 나오는 수량을 확인하여 범위 삭제. erase 함수는 1회만 실행하는 대신 연속으로 확인하는 과정에서 for문이 돌아감


풀이 코드


728x90

'공부 > 문제풀기' 카테고리의 다른 글

팩토리얼에서 끝에 붙는 0의 개수 구하기  (0) 2020.06.19
백준 10953 - A+B - 6  (0) 2019.10.11
프로젝트 오일러 문제 19  (0) 2019.10.08
백준 2558 - A+B - 2  (0) 2019.09.24
백준 2156 - 포도주 시식  (0) 2019.08.26
Posted by 아야카
2019. 10. 11. 16:04
728x90

문제 번호: 10953

문제 제목: A+B - 6

문제 주소: https://www.acmicpc.net/problem/10953


문제 내용

A, B가 ,로 구분되어 N개만큼 주어진다. A+B의 값을 출력한다.


테스트 케이스

5
1,1
2,3
3,4
9,8
5,2


2
5
7
17
7


문제 풀이

입력은 세 글자로 제한된다. A, B의 값이 1~9로 제한되기 때문.
문자열로 입력 받아서 [0], [2]에 있는 값끼리 합하면 된다.
단, 이렇게 입력 받은 경우에는 [0]과 [2]에 저장된건 아스키코드 값인 48~57이므로 계산을 할 때 각 문자에 '0'만큼의 값을 뺀 후 계산해야 한다.

문제와는 별개로 A, B의 입력 값이 10 이상인 경우에는 ,의 위치를 특정할 수 없으므로 데이터의 형식에 맞춰 int, char, int 순서로 입력 받아야 한다. int를 읽어들일 때 숫자가 아닌 데이터가 나올 경우 stream 읽는 것을 중단하기 때문.


풀이 코드


728x90

'공부 > 문제풀기' 카테고리의 다른 글

팩토리얼에서 끝에 붙는 0의 개수 구하기  (0) 2020.06.19
백준 15740 - A+B - 9  (0) 2019.10.11
프로젝트 오일러 문제 19  (0) 2019.10.08
백준 2558 - A+B - 2  (0) 2019.09.24
백준 2156 - 포도주 시식  (0) 2019.08.26
Posted by 아야카
2019. 10. 8. 19:59
728x90

Counting Sundays

   

Problem 19

You are given the following information, but you may prefer to do some research for yourself.

  • 1 Jan 1900 was a Monday.
  • Thirty days has September, April, June and November.
    All the rest have thirty-one, Saving February alone,
    Which has twenty-eight, rain or shine. And on leap years, twenty-nine.
  • A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.

How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?


1901년 1월 1일 ~ 2000년 12월 31일까지 매월 1일이 일요일인 달이 몇 개인지 세는 문제.

1900년 1월 1일은 월요일이며, 윤년 규칙은 기존과 동일하게 4년(윤년), 100년(평년), 400년(윤년)의 구분자를 갖는다.

 * 윤년 규칙에 따라 1900년 2월은 평년으로 28일이다.


1. 계산을 시작하는 해의 1월 1일의 요일을 구한다.

 * 시작하는 해의 1월 1일이 일요일인 경우 반환값에 이것이 누락되지 않도록 해야 한다.

2. 각 월에 해당하는 날짜만큼을 더한 후 요일을 구하여 일요일이면 반환값에 +1을 한다.

 * 2월인 경우에는 % 4, % 100, % 400 에 대한 처리를 하여 요일을 구한다.

3. 구한 결과값을 반환한다.




728x90

'공부 > 문제풀기' 카테고리의 다른 글

백준 15740 - A+B - 9  (0) 2019.10.11
백준 10953 - A+B - 6  (0) 2019.10.11
백준 2558 - A+B - 2  (0) 2019.09.24
백준 2156 - 포도주 시식  (0) 2019.08.26
백준 10844 - 쉬운 계단 수  (0) 2019.08.26
Posted by 아야카
2019. 10. 1. 19:27
728x90

설치

0. syntaxhighlighter를 다운로드 한 뒤 압축을 푼다.

SyntaxHighlighter_v3.0.83.zip


1. 블로그 관리 화면에서 꾸미기 - 스킨 편집으로 진입한다.
※ 블로그주소/manage/design/skin/edit#/


2. 우측 상단에 html 편집 버튼 클릭


3. 우측 상단에서 파일업로드 클릭 - 화면 하단에 [+추가] 버튼 클릭


4. syntaxhighlighter 폴더에서 scripts 폴더, styles 폴더 안에 있는 파일을 모두 업로드 한다.


5. HTML 탭으로 이동한다.

6. </head> 위에 아래 태그를 입력한 후 오른쪽 상단 구석에 있는 [적용] 버튼을 누른다.

<!-- SyntaxHighlighter 설정 시작-->
<script type="text/javascript" src="./images/shCore.js"></script>
<script type="text/javascript" src="./images/shLegacy.js"></script>
<script type="text/javascript" src="./images/shBrushBash.js"></script>
<script type="text/javascript" src="./images/shBrushCpp.js"></script>
<script type="text/javascript" src="./images/shBrushCSharp.js"></script>
<script type="text/javascript" src="./images/shBrushCss.js"></script>
<script type="text/javascript" src="./images/shBrushDelphi.js"></script>
<script type="text/javascript" src="./images/shBrushDiff.js"></script>
<script type="text/javascript" src="./images/shBrushGroovy.js"></script>
<script type="text/javascript" src="./images/shBrushJava.js"></script>
<script type="text/javascript" src="./images/shBrushJScript.js"></script>
<script type="text/javascript" src="./images/shBrushPhp.js"></script>
<script type="text/javascript" src="./images/shBrushPlain.js"></script>
<script type="text/javascript" src="./images/shBrushPython.js"></script>
<script type="text/javascript" src="./images/shBrushRuby.js"></script>
<script type="text/javascript" src="./images/shBrushScala.js"></script>
<script type="text/javascript" src="./images/shBrushSql.js"></script>
<script type="text/javascript" src="./images/shBrushVb.js"></script>
<script type="text/javascript" src="./images/shBrushXml.js"></script>
<link type="text/css" rel="stylesheet" href="./images/shCore.css">
<link type="text/css" rel="stylesheet" href="./images/shThemeDefault.css">
<script type="text/javascript">
SyntaxHighlighter.all();
</script>
<!-- SyntaxHighlighter 설정 끝-->



사용 방법

코드를 삽입하고 싶은 구간에 아래 내용을 입력한다.

<pre class="brush:언어">
</pre>

위와 같이 작성하면 본문에 아래와 같은 회색박스가 생긴다.
회색박스가 위치한 공간에 코드를 작성한 후 발행하면 된다.

html 모드에서 직접 코드를 작성할 경우 <, > 같이 태그에서 사용하는 특수문자가 제대로 표기되지 않으므로 코드는 에디터 모드에서 입력하는 것을 권장한다.

코드작성공간

참고로 일반 붙여넣기를 하거나 직접 작성하는 경우 <pre> 태그 사이에 <p> 태그가 추가되어 위에 출력되는 예제처럼 실제 출력 시에 <p></p> 태그가 출력된다. 글 작성 시 이 부분에 대해 체크할 필요가 있다.




참고 - 티스토리 코드블럭

티스토리의 새로운 글쓰기에는 코드블럭을 삽입할 수 있는 자체 기능이 있다.
티스토리에서 공식적으로 지원하는 기능인만큼 별도의 설치가 필요 없고 사용하기 쉽다는 장점이 있지만
새로운 글쓰기에서만 지원되는 기능이고, 별도의 커스터마이징을 할 수 없다.

사용 방법은 아래와 같다.

0. 블로그 설정에서 콘텐츠 - 설정으로 진입한 후 새로운 글쓰기를 [사용합니다]를 선택 후 [변경사항 저장]을 클릭한다.


1. 글쓰기 화면에 진입하면 상단 메뉴 중 […] 버튼을 클릭한 후 [<> 코드블럭]을 클릭한다.

2. 코드블럭 화면이 출력된다.
코드블럭 삽입에서 작성하고자 하는 언어선택한 뒤 본문에 코드를 작성한 후 확인을 클릭하면 본문에 코드가 삽입된다.

지원 언어: HTML, CSS, Javascript, Python, Java, C++, Kotlin, Swift, PHP, Go


본문에 삽입됐을 때의 모습 (C++ 기준)

포스팅 한 후의 모습 (C++ 기준)

728x90
Posted by 아야카
2019. 9. 24. 03:22
728x90

문제 번호: 2558

문제 제목: A+B - 2

문제 주소: https://www.acmicpc.net/problem/2558


문제 내용

입력된 두 수의 합계를 출력한다. 입력 값은 개행 문자로 구분된다.


테스트 케이스

1
2

3


문제 풀이

1000번 문제와 다른 점이라곤 입력이 공백으로 구분되는게 아니라, 개행으로 구분된다는 점 뿐이다.
cin은 둘 다 구분자로 인식하므로 별도의 처리를 해줄 필요는 없다.


풀이 코드

728x90

'공부 > 문제풀기' 카테고리의 다른 글

백준 10953 - A+B - 6  (0) 2019.10.11
프로젝트 오일러 문제 19  (0) 2019.10.08
백준 2156 - 포도주 시식  (0) 2019.08.26
백준 10844 - 쉬운 계단 수  (0) 2019.08.26
백준 1463 - 1로 만들기  (0) 2019.08.26
Posted by 아야카
2019. 9. 15. 05:08
728x90

erase를 사용할 때는 erase로 반환되는 iterator를 변수에 대입해야 합니다.
erase(it)를 했다고 it가 자동으로 갱신되는게 아니라 it = erase(it)로 대입을 해줘야 합니다.
erase를 할 경우 iterator 변수는 empty 상태로 변경되기 때문입니다.

Visual Studio에서는 조사식으로 확인할 때 이 iterator의 값이 empty로 표기되지 않고 
삭제한 결과에 맞게 자동으로 갱신된 것처럼 표기됩니다.


erase를 하기 전의 상태
it는 nums[1]을 가리키고 있는 상태이며, 조사식에도 it의 [ptr]이 &nums[1]과 같은 것을 볼 수 있습니다.



erase를 하고 난 후의 상태
it도 갱신되고 [ptr]도 &nums[1]의 것과 동일한 것으로 출력됩니다.


하지만 막상 iterator 변수를 참조하려고 하는 순간 런타임 에러가 발생합니다.


Leetcode 문제를 풀다 iterator 사용법을 헷갈려하여 잠시 헤맸던 상황이었고
혹시 저와 같은 문제로 고생 중인 분이 있을 수도 있기에 포스팅으로 남깁니다.


for (auto it = nums.begin() + 1; it != nums.end();)
{
	if (*it == *(it - 1))
	{
		nums.erase(it);		// 이러면 it 참조 시 에러 발생
		it = nums.erase(it);	// it를 계속 사용할 거라면 이렇게.
	}
	else
	{
		it++;
	}
}
728x90
Posted by 아야카