https://www.acmicpc.net/problem/6064

 

6064번: 카잉 달력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 한 줄로 구성된다.

www.acmicpc.net

 

제일 처음엔 1씩 증가하면서 값을 바꿔주는 식으로 접근을 했었는데, 당연히 시간초과로 틀렸고

그 다음엔 루프를 줄이는 즉 생략할 수 있는 부분에 관하여 고민하기 시작했다.

import sys
T = int(sys.stdin.readline())

for _ in range (T):    
    M, N, x, y = map(int, sys.stdin.readline().split())

    yIncrease= x
    find = False
    while(yIncrease<=M*N):
        if(yIncrease%N == y%N):
            print(yMove)
            find = True
            break
        yIncrease +=M

    if(not find):
        print(-1)

먼저 M, N = 10, 12 이고 x, y = 3, 9라고 가정을 한 다음 접근해보도록 하자.

 

사실 M과 N은 각각 10진수 12진수의 개념이고 x와y는 각각 10과 12진수로 나눈 나머지가 되는 상태라는 점을 파악해야  한다.

 

그리고 나면 M(10)에 따른 x(3)이 정해지고 나면, y에 나올 수 있는 그 숫자가 제한된다는 사실을 알 수 있는데, 아래 내용을 통해서 알아보도록 하자

 

먼저 초기값으로 y =3 이 주어졌다고 가정하자. 그리고 x(3)에 10진법의10을 아무리 더한다고 해도 x는 3으로 계속 일정하다는 사실을 이해해야 한다.

 

x+10 = 3이고, y + 10(10진법) = 13 (%12) ---1

 

x+10 = 3이고, y + 10(10진법) = 23 (%12) ---11

 

x+10 = 3이고, y + 10(10진법) = 33 (%12) ---9

 

x+10 = 3이고, y + 10(10진법) = 43 (%12) ---7

 

x+10 = 3이고, y + 10(10진법) = 53 (%12) ---5

x+10 = 3이고, y + 10(10진법) = 63 (%12) ---3

이 과정은 x에 10을 더하는 과정으로 계속 진행했을 때, y에 나올 수 있는 값은 1, 3, 5, 7, 9, 11으로 고정되어 있다는 사실을 받아 들일 수 있다.

 

이 과정에서 y가 증가하는 최대값은 사실 M과 N의 최소공배수까지만 연산으로도 충분하지만 편의상 M*N까지만 하였다.

 

그리고 여기서 

yIncrease%N == y%---(1)
 
yIncrease%N == y       ---(2)
 
 
(2)식을 이용하지 않고 (1)식을 이용한 이유는 y가 12일때를 생각해보면 (1)식은 만족하지만 (2)는 만족하지 않기 때문이다.
 
 
 
 
 
 
 
 
 

1748번: 수 이어 쓰기 1

첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.

www.acmicpc.net

 

N = int(input())
str = str(N)
strLen = len(str)
count = 0
count += (N-pow(10,strLen-1)+1)*strLen
for i in range(1,strLen):
    count += (9*pow(10,i-1)*i)
print(count)

먼저 N = 2329라고 가정을 해보자,

 

계산은 다음과 같이 4단계로 나뉜다.

 

  1.  1000~2329 까지의 숫자는 4를 더하고
  2.  100~999 까지의 숫자는 3을 더하고
  3.  10 ~ 99 까지의 숫자는 2를 더하고
  4.  1~9 까지는 숫자 1을 더하게 된다

그리고 위의 각 경우는 다음과 같이 일반식으로 나타낼 수 있게 된다. 

  1.  (2329-10^3+1) * 4
  2. ( 9 * 10^2) * 3
  3. ( 9 * 10^1) * 2
  4. ( 9 * 10^0) * 1

이 일반식을 코드로 구현만 하면 통과할 수 있다.

1. 과제명

 - 코드스테이츠 K-디지털 기초역량훈련 데이터 기초반 1-2(basics)

2. 과제내용

[Q1] 실습에 나왔던 pwd 명령어 하나를 사용해보세요.

 - pwd는 현재 작업 디렉토리를 보여주는 명령어이다 아마도(Path With Directory?) (옵션도 없고, 인수도 없다)

 

[Q2] 실습에 나왔던 ls 명령어 네 개를 사용해보세요.

 - ls는 list contents of directory의 약어로, 디렉토리의 목록 출력해준다

 

[Q3] 실습에 나왔던 cd 명령어 세 개를 사용해보세요.

 - cd : change directory의 약어로, 현재 위치의 디렉토리 이동한다

 - cd /   는root directory 로 이동

 - cd /usr  는 root directory 의 usr 폴더로 이동

 - cd ~ 는home directory 로 이동

home directory는 "내 컴퓨터"의 위치다

[Q4] 실습에 나왔던 mkdir 명령어 두 개를 사용해보세요.

 - mkdir : make directory의 약자로, 디렉토리(폴더)를 만들라는 명령어이다

-p (parent)로 부모디렉토리까지 생성가능한 방법이다

[Q5] 실습에 나왔던 rm 명령어 세 개를 사용해보세요.

 - rm: remove file의 약자인데, 원래는 파일을 지우기 위한 목적으로 쓰지만 rm -r 을 쓰면 디렉토리를 지우고, 그 디렉토리의 하위 파일까지 지우는 명령어이다.

 

 

3. 과제를 통해 배운점

 - 이번 과제로 리눅스명령어 사용법을 배울 수 있었다

 - rm으로 삭제한 파일은 복원 불가. 위험성이 높다고 한다

 - ls -a (--all) : 숨김파일까지 출력

   ls -l (long) : 자세한 파일의 속성 출력

 

1. 과제명

 - 코드스테이츠 K-디지털 기초역량훈련 데이터 기초반 1-1(basics)

2. 과제내용

 - 본인 깃허브 계정생성 & 리포지토리 만들기

 - https://github.com/soonuk

 - 기존에 있던것에 새로운 리포티토리 생성 후 완료

 

soonuk - Overview

soonuk has 2 repositories available. Follow their code on GitHub.

github.com

 

3. 과제를 통해 배운점

+ Recent posts