CodeUp

CodeUp [기초-종합] 6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091

집가고시퍼 2022. 1. 1. 20:19
  • [6077]
    Q : 정수 1개가 입력된다. 1부터 그 수까지 짝수만 합해 출력해라.

    A :
    for i in ragne(1,a+1)으로 쓰면 1~a까지의 수에 대해 판단할 수 있지만, 여기선 0을 더해도 상관 없으므로 괜찮다.

  • [6078]
    Q : 문자들이 1개씩 계속해서 입력된다. 영문 소문자 q가 입력될 때까지 입력한 문자를 계속 줄을 바꿔 출력한다(q까지 출력).

    A :
  • [6079]
    Q : 정수 1개가 입력된다. 1,2,3,...을 순서대로 계속 더해 합을 만들어가다가, 입력된 정수와 같거나 커졌을 때, 마지막에 더한 정수를 출력한다.

    A :
    애초에 n=0으로 시작시키고 6번 줄과 7번 줄의 순서를 바꾸면 9번 줄에서 print(n)으로 써도 된다.
    n+=1을 먼저 하고 sum+=n을 한다는 것은 해당 sum을 구하는데 필요한 n을 그 단계에서 준비하는 꼴이기 때문에 sum >= a가 되는 단계에서는 n+=1이 일어나지 않아 print(n)을 해도 된다.
    하지만 sum+=n을 먼저 하고 n+=1을 나중에 하면, 다음 단계에 쓸 n을 미리 준비해 두는 것이기 때문에 print(n-1)을 써줘야 한다.

  • [6080]
    Q : 서로 다른 주사위 2개의 면의 개수 n,m이 공백을 두고 입력된다(단, n,m은 10이하의 자연수). 나올 수 있는 주사위의 숫자를 한 세트씩 줄을 바꿔 모두 출력한다(n m 꼴). 오름차순 순서로 출력하도록 한다.

    A :
    print(i,j)를 하면 i와 j가 공백을 두고 print된다.
    그리고 range(1,a)가 아닌 range(1,a+1)을 써줘야 한다. range(1,a)는 1~a-1까지이므로.

  • [6081]
    Q : 16진수로 한 자리 수가 입력된다. 단, A~F까지만 입력된다. 입력된 16진수에 1~F까지 순서대로 곱한, 16진수 구구단을 줄을 바꿔 출력한다. 계산 결과도 16진수로 출력해야 한다.

    A :
    int(input(),16)으로 16진수 입력을 받을 수 있다.
    %X는 16진수 표기를 나타낸다. 4번 줄처럼 쓰면 여러 변수를 동시에 print할 수 있다.

  • [6082]
    Q : 1~29인 정수 1개가 입력된다. 1부터 그 수까지 순서대로 공백을 두고 수를 출력하는데, 3,6,9가 포함되어 있는 수인 경우, 그 수 대신 X를 출력한다.

    A :
    이 문제에서는 1~29라는 조건이 주어졌으므로 10의 자리 수가 3,6,9인 경우는 고려하지 않아도 된다. 만약 고려한다면, i//10으로 10으로 나눈 몫을 구하는 방식으로 구할 수 있다.

  • [6083]
    Q : r,g,b 각 빛의 가짓수가 공백을 두고 입력된다. 예를 들어, 3 3 3은 r,g,b 빛에 대해 각각 0~2까지 3가지 색이 있음을 의미한다. 만들 수 있는 rgb색의 경우를 오름차순으로 줄을 바꿔 모두 출력하고, 마지막에 그 개수를 출력하라(0 0 0, 0 0 1,...,2 2 2, 27)

    A :
    print(i,j,k)를 하면 i,j,k 사이에 공백을 두고 출력한다.

  • [6084]
    Q : h,b,c,s가 공백을 두고 입력된다. 1초 동안 마이크로 소리강약을 체크하는 횟수를 h, 한 번 체크한 값을 저장할 때 사용하는 비트수를 b, 좌우 등 소리를 저장할 트랙 개수인 채널 개수를 c, 녹음할 시간(초) s다.
    이 때, 필요한 저장용량을 계산하는 프로그램을 만들자. 필요한 저장공간을 MB 단위로 바꾸어 소수점 첫째자리까지의 정확도로 출력하고, MB를 공백을 두고 출력한다.

    A :
    2**23은 2의 23승이라는 뜻. 2^23을 쓰면 안된다. ^는 비트단위 XOR 연산. 혹은 print(round(data,1),"MB")로 써도 된다.

  • [6085]
    Q : w,h,b가 공백을 두고 입력된다. 1MB = 1024KB = 1024*1024B = 8*1024*1024b다. 비트단위인 w*h*b(사진크기)를 MB단위로 출력해라. 소수점 셋째 자리에서 반올림해라.

    A :
    처음에는 print(round(~~,2), 'MB')로 썼는데, 일부 경우는 맞고, 일부 경우엔 틀린 결과가 나왔다. 이는 부동소수점이 부정확하기 때문이다. 10진법 기준의 소수를 float가 정확하게 표현하지 못하기 때문에 나타난다. 가급적 2번 line처럼 사용하도록 하자.

  • [6086]
    Q : 정수 1개를 입력받는다. 1,2,3... 순서대로 계속 더해가다가 그 합이 입력된 정수보다 커지거나 같아지는 경우, 그때까지의 합을 출력한다.

    A :
    이 문제에서 a까지 더하면 수학적으로 무조건 sum이 a보다 커지므로 4번처럼 for~~로 썼는데, 3번 line에 c=0을 설정해 주고, while 1: sum+=c, c+=1, if(s>=a):break로 쓸 수도 있다.
    내가 4번처럼 range를 쓴 것은 1부터 커지는 수를 도입하기 위해서인데, 3번 line에 c=0을 도입하면 range를 안써도 된다. 복잡하게 수학적인 것을 생각 안해도됨.

  • [6087]
    Q : 정수 1개를 입력받는다. 1부터 입력한 정수보다 작거나 같을때까지 1씩 증가시켜 출력하되, 3의 배수는 출력하지 않는다. 줄을 바꾸지 않고, 공백을 두고 출력한다.

    A :
    pass 대신 continue를 써도 된다. pass는 실행할 코드가 없는 것으로, 다음 행동을 계속해서 진행한다. continue는 바로 다음 순번의 loop를 수행한다.
    만약 pass 뒤에 print(i)가 있었으면, 1~a의 모든 수가 출력될 것이다. 하지만 continue를 쓰면 그 뒤에 print(i)가 있어도 수행되지 않는다. 대신 다음 loop로 가는데, 6번 line도 가지 않고 그냥 3번의 다음 i를 받는 곳으로 간다.

  • [6088]
    Q : 시작값(a), 등차의 값(d), 몇 번째 수인지를 의미하는 정수(n)이 공백을 두고 입력된다. a와 d를 사용한 등차수열에서 n번째 값을 구해라.

    A :
    풀이에서는 n-1번 loop를 돌면서 d를 반복해 더해주는 방법으로 구했다.

  • [6089]
    Q : 시작값(a), 등비의 값(r), n이 입력된다. a와 r을 사용한 등비수열에서 n번째 값을 구해라.

    A :
  • [6090]
    Q : 시작값(a), 곱할 값(m), 더할 값(d), 몇번째 인지를 나타내는 정수(n)이 공백을 두고 입력된다. a_n = a_n-1 * m + d이다. n번째 수를 출력해라.

    A :
  • [6091]
    Q : 같은 날 동시에 가입한 3명의 방문 주기가 공백을 두고 입력된다. 3명이 다시 모두 함께 방문하는 날을 출력해라. day=1부터 시작한다.

    A :
    최소공배수 찾는 문제. 반대로 while (day%a!=0 or day%b!=0 or day%c!=0) : day+=1로 하면 더 간단하다.