https://www.youtube.com/watch?v=KnsPGNaKsGk 

1. text area> action control/property control

2. property: Document / Table / Column

3. axis select > Set from Property

4. Column selection > default:False

5. action control > actions, export report, script, data functions

 

'파이썬 & 엑셀 > SPOTFIRE' 카테고리의 다른 글

[SPOTFIRE] Property Control  (0) 2022.05.10

SET @HOUR=-1;
SELECT (@HOUR := @HOUR+1) AS HOUR,
    (SELECT COUNT(*)
     FROM ANIMAL_OUTS
     WHERE HOUR(DATETIME)=@HOUR) AS COUNT
FROM ANIMAL_OUTS
WHERE @HOUR < 23
GROUP BY HOUR
ORDER BY HOUR

---------------------------------------------------------------

SET @HOUR=-1;

SELECT (@HOUR := @HOUR+1) AS HOUR,

FROM ANIMAL_OUTS
WHERE @HOUR < 23

HOUR= -1~22 까지 -> 0~23 까지 TABLE 생성됨,

 

     SELECT COUNT(*)
     FROM ANIMAL_OUTS
     WHERE HOUR(DATETIME)=@HOUR) AS COUNT

최종적으로  HOUR, COUNT 두 COLUMN생성

https://www.youtube.com/watch?v=KnsPGNaKsGk 

Property에는 Document Properties, Table Properties, Column Properties 가 있음.

보통 Document를 쓰게 될 것. (File > Document Properties > Properties)

 

Properties에서 원하는 이름으로 생성 후,

Text Area에서 Insert Property Control (dropbox 등)

Set property value through: 에서는 원하는 column 선택할 수도 있고 column안의 value로 할 수도 있다.

Column Selection으로 했다면 select column에서 boolean type으로 true/false 로 보이고 안보이고 선택 가능.

(default를 false로하면 전부 선택 x. 그 후 원하는 column만 Add 해주면 된다)

저장해주면 dropbox 생성 확인.

 

1) 그래프에 적용

그래프의 axis 우클>Set from Property>생성한 property 선택하면 원하는 값으로 볼 수 있음.

2) Table에 적용

우클 > Properties > Data > Limit data using expression에서 설정.

ex. [myDateTime]=DocumentProperty("datetime") 

 

―――――――――――――――――――――――――――――――――――――――――――

추가

Table에 적용하는 방법 두번째.

위처럼 limit data를 쓰면 해당 chart에만 filtering 적용.

IronPython script를 쓰면 filtering scheme에 적용 -〉 해당 filtering scheme쓰는 chart 전체에 적용 가능.

 

'파이썬 & 엑셀 > SPOTFIRE' 카테고리의 다른 글

[SPOTFIRE]Property Controls and Action Controls  (0) 2022.06.29

 

 

----------------------------------------------------

1. vlookup

기준 열에서 오른쪽으로 일정 간격 떨어져있는 값을 구하는 함수.

=vlookup(lookup_value, table_array, col_index_num, [range_lookup])

2. match

범위에서 찾는 값이 해당하는 위치를 반환.
=match(lookup_value, lookup_array, [match_type])

결과는 숫자

 

3. index

선택한 위치에서 행, 열로 일정 간격 떨어진 값을 반환.

=index(array, row_num, [column])

 

index & match

1) 행/열

행, 열을 직접 입력하는 대신 match 함수로 구해서 넣는 법.

2) 다중조건

행, 열로 나뉘어져 있지 않고 여러 조건을 고려해야 하는 경우 (조건)*(조건) 으로 넣어줌.

ctrl+shift+enter 로 배열 함수로 만들어 줘야 한다.

 

4. offset
index 상위 버전 함수.

=offset(reference, rows, cols, [height], [width])

자기가 1이 아니라 0인듯.

마지막 값 반환.. row 함수는 1,2,3,, 쓰는 대신 편하게 쓸수 있음.

기준일로부터 최근 3일간의 합을 구할 수 있음. rows, cols 는 자기가 0이고 height, width 는 길이니까 1부터인듯. - 는 위로.

 

5. indirect

텍스트 형식으로 입력된 셀 주소의 값을 가져오는 함수.

=indirect(ref_text)

 

6. address

숫자를 셀 주소로 반환해줌.

=address(row_num, column_num, [abs_num], [aq], [sheet_text])

abs_num 은 참조 형식.

aq는 주소 형식.

백준 단계별로 풀어보기 8- 기본 수학1

 

 

 

 


1712. 손익분기점

문제

월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.

예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다.

노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 보면 어느 순간 총 수입(판매비용)이 총 비용(=고정비용+가변비용)보다 많아지게 된다. 최초로 총 수입이 총 비용보다 많아져 이익이 발생하는 지점을 손익분기점(BREAK-EVEN POINT)이라고 한다.

A, B, C가 주어졌을 때, 손익분기점을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 A, B, C가 빈 칸을 사이에 두고 순서대로 주어진다. A, B, C는 21억 이하의 자연수이다.

출력

첫 번째 줄에 손익분기점 즉 최초로 이익이 발생하는 판매량을 출력한다. 손익분기점이 존재하지 않으면 -1을 출력한다.

A,B,C = map(int,input().split())

n = A/(C-B)

if B >= C:
    print(-1)
  
else:
    print(int(n)+1)

-> 계속 런타임 에러가 떠서 뭔가싶었는데 (ZeroDivisionError). C-B가 0일때 오류.

A,B,C = map(int,input().split())

if B>=C:
    print(-1)
else:
    n = int(A/(C-B))
    print(n+1)

 

2292. 벌집

문제

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

입력

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

출력

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

N = int(input())

cnt = 1
ref = 1

while True:
    if N <= ref:
        break
    else:
        ref += 6*cnt
        cnt += 1

print(cnt)

많이 헤멨다

 

1193. 분수찾기

문제

무한히 큰 배열에 다음과 같이 분수들이 적혀있다.

1/1 1/2 1/3 1/4 1/5
2/1 2/2 2/3 2/4
3/1 3/2 3/3
4/1 4/2
5/1

이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자.

X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다.

출력

첫째 줄에 분수를 출력한다.

X = int(input())
i = 1

while True:
    
    if X <= i:
        n = X % (i+1)
        if i%2 == 0:
            print(n,"/",i+1-n, sep='')
        else:
            print(i+1-n,"/",n, sep='')
        break
    else:
        X -= i
        i += 1

 

 

2869. 달팽이는 올라가고 싶다

문제

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

출력

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

A,B,V = map(int,input().split())
n = (V-B)/(A-B)
if n == int(n):
    print(n)
else:
    print(int(n)+1)

->> 출력형식 오류인줄알고 아래로 바꿨으나 여전히 틀림.
print('{:.0f}'.format(n))

 

A,B,V = map(int,input().split())
n = (V-A)/(A-B)
if n == int(n):
    ans = n +1
else:
    ans = int(n)+2
print('{:.0f}'.format(ans))
#int()가 반올림이 아니라 버림이었다는 충격적인 사실

A,B,V = map(int,input().split())
n = (V-A)/(A-B)
if n == int(n):
    print(n+1)
else:
    print(int(n)+2)
#얘는 틀린거보니 포맷 필요하긴 한듯

 

 

 

10250. ACM 호텔

문제

ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.

문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 인접한 두 방 사이의 거리는 같은 거리(거리 1)라고 가정하고 호텔의 정면 쪽에만 방이 있다고 가정한다.

그림 1. H = 6 이고 W = 12 인 H × W 호텔을 간략하게 나타낸 그림

방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다.

손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다.

여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.

입력

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W). 

출력

프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.

import sys
T = int(input())
for i in range(T):
    H, W, N = map(int,sys.stdin.readline().split())
    a = N % H #층수는 N % H
    b = N // H + 1 #호수는 N // H + 1
    print('{0}{1:02d}'.format(a,b))
    
import sys
T = int(input())
for i in range(T):
    H, W, N = map(int,sys.stdin.readline().split())
    if N % H == 0:
        a = H
        b = N // H
    else:
        a = N % H #층수는 N % H
        b = N // H + 1 #호수는 N // H + 1
    print('{0}{1:02d}'.format(a,b))

#층수 배수일때의 조건을 생각해줘야함.

 

2775. 부녀회장이 될테야

문제

평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.

이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.

아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.

입력

첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다

출력

각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.

제한

  • 1 ≤ k, n ≤ 14
T = int(input())
for t in T:
    k,n = map(int, input().split()) #(2,4)
    
    cnt = 0
    K = range(n+1) #[0,1,2,3,4]
    while cnt < k:
        for i in range(1,n+1): #1,2,3,4
            k[i] += k[i=1] #[0,1,3,6,10]
        cnt += 1
    break
print(K[n])

-> 컴파일 에러


T = int(input())
for t in T:
    k,n = map(int, input().split()) #(2,4)
    
    cnt = 0
    K = range(n+1) #[0,1,2,3,4]
    while cnt < k:
        for i in range(1,n+1): #1,2,3,4
            k[i] += k[i-1] #[0,1,3,6,10]
        cnt += 1
print(K[n])

-> 런타임 에러(TypeError)


T = int(input())
for _ in range(T):
    k = int(input()) #2
    n = int(input()) #4
    
    K = list(range(n+1)) #[0,1,2,3,4]
    for num in range(k):
        for i in range(1,n+1): #1,2,3,4
            K[i] += K[i-1] #[0,1,3,6,10]
    
    print(K[-1])
    
 -> 정답

T가 정수인데 왜 for t in T 이따구로,,, 코드를 썼는지 모르겠다

 

2839. 설탕 배달

문제

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

출력

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.

N = int(input())  #36

k = N // 5  #k = 7
while True:
    if k == -1:
        print(-1)
        break
    else:
        l = (N - 5*k ) % 3 #l = 1 k = 6 l = 0
        if l == 0:
            print(k + ((N - 5*k ) // 3))
            break
        else:
            k -= 1

설탕/5 를 봉지 시작값으로 두고 나머지가 3으로 나누어 떨어지지 않을 경우 하나씩 줄이는 방식.

sugar = int(input())

bag = 0
while sugar >= 0 :
    if sugar % 5 == 0 :  
        bag += (sugar // 5)  
        print(bag)
        break
    sugar -= 3  
    bag += 1 
else :
    print(-1)

요런 방법도 있다. 5의 배수가 될때까지 전체에서 3kg짜리 하나씩 빼는방법. (출처: https://ooyoung.tistory.com/81)

 

10757. 큰 수 A+B

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

출력

첫째 줄에 A+B를 출력한다.

A, B = map(int, input().split())

print(A+B)

대체 갑자기 이런 문제가 왜나왔나 했더니

 

파이썬 같은 언어는 10,000자리 정도의 자연수도 자유롭게 다룰 수 있습니다. 하지만 C/C++이라면 이 문제를 어떻게 풀까요? C/C++ 사용자가 아니더라도 고민해 보면 좋을 것입니다

보니까 C/C++ 이면 큰 수인데 자릿수가 다르면 뭐 밀리고 어쩌고 해서 reverse로 뒷자리부터 계산해줘야 한다는 듯.

백준 단계별로 풀어보기7 -문자열

 

replace

 

 


11654. 아스키 코드

n=input()
ascii = ord(n) #아스키 -> 문자
print(ascii)

chr = chr(ascii) #문자 -> 아스키

11720. 숫자의 합

n = int(input())
L = list(map(int,str(input())))
print(sum(L))

10809. 알파벳 찾기

#1. for문과 if문 사용

string = str(input())
alp = list(range(97,123)) #아스키
for a in alp: #각 abc..에 대해
    for i in range(len(string)):
        if chr(a) == S[i]:
            break
        else:
            i = -1
    print(i, end =' ')
    
string = list(map(str, input()))
for i in range (97,123):
    for j in range(0, len(string)):
        a = -1
        if chr(i) == n[j]:
            a = j
            break
    print(a, end=' ')

#2. in 사용

string = input()
alp ='abcdefghijklmnopqrstuvwxyz'
for i in alp:
    if i in string:
        print(string.index(i), end= ' ')
    else:
        print( -1, end =' ')

#3. find()사용

string = input()
alp= list(range(97,123))
for i in alp:
    print(string.find(chr(i))) 
    
string = input()
alp = "abcdefghijklmnopqrstuvwxyz" #아스키 대신 문자 입력
for i in alp:
    print(string.find(i), end = ' ')

2675. 문자열 반복

T = int(input())
for t in range(T):
    N, S = map(str,input().split())
    for s in S:
        print(str(s)*int(N),end='')
    print('\n',end='')

오랜만에 한번에 맞았는데, 역시 공부든 뭐든 맞아야 할맛이 난다...

 

1157. 단어 공부

S = input()
SU = S.upper() #대문자화
SU_list = list(SU) #대문자로 리스트 생성 

SU_set = set(SU)
SS_list = list(SU_set) #원소 중복제거한 리스트 만들어서

cnt_list = []
for ss in SS_list: 
    cnt = SU_list.count(ss) #각 원소에 대해 개수 세고
    cnt_list.append(cnt) #리스트에 추가한다음

max_cnt = max(cnt_list) #그중 최댓값 찾아서
max_index = cnt_list.index(max_cnt) #인덱스로 문자 반환

if cnt_list.count(max_cnt) == 1: #최댓값이 하나라면
    print(SS_list[max_index]) #문자 프린트
    
else: #하나가 아니라면
    print('?') #물음표 프린트

인데... 맞긴 했지만 오래걸린다

#check, get 사용

S = input().upper()
max_cnt = 0
check = {}
answer = ''
 
for i in S:
    cnt = check.get(i, 0) + 1
    check[i] = cnt
    if max_cnt < cnt:
        max_cnt = cnt
        answer = i
    elif max_cnt == cnt:
        answer = '?'
print(answer)

 

1152. 단어의 개수

S = list(input().split())
print(len(S))

2908. 상수

A, B = map(str,input().split())

A_ = list(A)
B_ = list(B)

A_new = int(A_[2]+A_[1]+A_[0])
B_new = int(B_[2]+B_[1]+B_[0])

print(max(A_new,B_new))

5622. 다이얼

S = list(input())
dic = {'A':2, 'B':2, 'C':2, 'D':3, 'E':3, 'F':3, 'G':4, 'H':4, 'I':4, 'J':5, 'K':5, 'L':5, 'M':6, 'N':6, 'O':6, 'P':7, 'Q':7, 'R':7, 'S':7, 'T':8, 'U':8, 'V':8, 'W':9, 'X':9, 'Y':9, 'Z':9}
ans = 0
for i in S: 
	ans += dic[i]
print(ans+len(S))

2941. 크로아티아 알파벳

Word = input()
word = 'A'+Word+'A'

ans = 0
croatian = ['c=', 'z=', 's=', 'lj', 'nj', 'c-', 'd-']


dzz = list(word.split('dz='))
word_dzz = ''
for d in dzz:
    word_dzz += d
    word_dzz += 'A'


word_len = len(list(word)) - list(word).count('A')
word_dzz_len = len(list(word_dzz)) - list(word_dzz).count('A')
num_dzz = (word_len - word_dzz_len)/3


for cro in croatian:
    word_new=''
    dz = word_dzz.split(cro) #['1', 'akz=', 'kdc-1']

    
    for i in dz:
        word_new += i
        word_new += 'A'

    word_dzz = word_new
               
word_new_len = len(list(word_new)) - list(word_new).count('A')
num_cro = (word_dzz_len - word_new_len)/2
ans = num_dzz + num_cro + word_new_len

print(int(ans)) #int안붙이니까 틀렸습니다 뜬다.. 소수점 때문인가

처음에 검색 없이 풀려고 하니까.. 함수 아는게 없어서 제일 기본적인 함수만 쓰게되니까 엄청 복잡하고 길고 무식해진다. 그래도 재밌긴함 ㅎㅎ 사실 기본함수로도 똑똑하게 푸는 방법 많지만...ㅎ

x = input()
y = len(x)
cro_al = ['c=','c-','dz=','d-','lj','nj','s=','z=']
for i in range(0, len(x)): #0에서 문자열의 길이만큼 반복해준다.
    if len(x) < 2: #문자가 2개보다 작으면 문자열의 길이를 출력한다.
        y = len(x)
    elif len(x) == 2: #문자가 2개일때 크로아티아 알파벳이라면 1을 출력한다.
        if (x[i-2] + x[i-1]) in cro_al:
            y = 1
    elif (x[i-3]+x[i-2]+x[i-1]) in cro_al: #연달아 있는 문자가 3개를 더했을 때 크로아티아 알파벳이라면 길이에서 -2를 해준다.
        y -= 2
    elif (x[i-2] + x[i-1]) in cro_al: #연달아 있는 문자가 2개를 더했을 때 크로아티아 알파벳이라면 길이에서 -1을 해준다.
        y -= 1
print(y)

요런방법도 있다. 출처: https://one-hour.tistory.com/25

x = input()
cro_al = ['c=','c-','dz=','d-','lj','nj','s=','z=']
for i in cro_al:
    x = x.replace(i, 'a')
print(len(x))

모범답안. replace함수가 있을것같긴 했다 ㅎㅎ

 

1316. 그룹 단어 체커

N = int(input())
cnt = N
for n in range(N):
    W = input()
    for i in range(len(W)-2):
        if W[i] != W[i+1] and W[i] in W[i+2:]:
            cnt -= 1
            break
print(cnt)

break가 어딜 탈출해서 어디로 가는건지 헷갈린다.

백준 단계별로 풀어보기6 -함수

 

def f(x):

    return y

 


15596. 정수 N개의 합

def solve(a):
    ans = sum(a)
    return ans

이게 맞네...

 

 

4673. 셀프 넘버 

def d(n):
    dn = 0
    if 0<n<10:
        dn = n + n%10
    elif 10 <= n < 100:
        dn = n + n//10 + n%10

    elif 100 <= n < 1000:
        dn = n + n//100 + (n%100)//10 + n%10

    elif 1000 <= n < 10000:
        dn = n + n//1000 + (n%1000)//100 + (n%100)//10 + n%10
    return dn

setdn=set() #중복 제거 위한 set 사용
for i in range(1,10000):
    setdn.add(d(i))

setnum = set(range(1,10001))
selfnum = list(setnum - setdn) #차집합 하기도 간편
selfnum.sort() #오름차순 정렬

for sn in selfnum:
    print(sn)

d(n)정의해서 하는 법.

num_list = list(range(1, 10001))
dn_list = []  #d(n) 리스트

for num in num_list :
    for n in str(num): #str은 문자'열'이라 한자씩 떼어짐
        num += int(n)  #더할때는 int로 바꿔서. num이 d(n)이 된다.
    if num <= 10_000:
        dn_list.append(num)

for dn in set(dn_list) :  # set 으로 중복값 제거
    num_list.remove(dn) # 생성자 있는 숫자d(n) 을 삭제
for self_num in num_list : 
    print(self_num)

 

1065. 한수

def h(n):
    
    for a in range(1,n+1):
        
        if n < 100:
            hs = len(range(n))
            
        elif 100 <= n < 1000:
            l = []
            for b in range (100, n+1):
                m = []                
                for k in str(b):
                    m.append(int(k))                    
                if m[0]+m[2] == m[1]*2:
                    l.append(b)
            hs = len(l)+99
            
        elif n == 1000:
            hs = 144
        
    return hs

num = int(input())
print(h(num))

계속 하다보니까 점점 어렵게 하는것같다.

def h(n):
    hs = 0 
    for a in range(1,n+1):
 
        if a < 100:
            hs += 1
            
        elif 100 <= a < 1000:
            l = list(map(int,str(a))) #map의 정확한 쓰임?
            if l[0]+l[2]==l[1]*2:
            	hs += 1
                
    return hs

num = int(input())
print(h(num))

 

훠어어얼씬 빠름 ㅠㅠ

단순하게 생각하자...

백준 단계별로 풀어보기5 - 1차원 배열

 

list

min(), max()

append(), add()

round(), sum()

format, %f

자릿수


10818. 최소, 최대 

N = int(input())
A = list(map(int,input().split()))
i = 0
min = A[0]
max = A[0]
while i < N:
    try:
        if min < A[i+1]:
            i += 1
        else:
            min = A[i+1]
            i += 1
    except:
        break
i=0
while i < N:
    try:
        if max > A[i+1]:
            i += 1
        else:
            max = A[i+1]
            i += 1
    except:
        break
print(min,max)

야매버전

N = int(input())
A = list(map(int,input().split()))
min = A[0]
max = A[0]
for i in A[1:]:
    if min > i:
        min = i
    elif max < i:
        max = i
        
print(min,max)

좀더 똑똑한 버전

N = int(input())
A = list(map(int, input().split()))
print(min(A),max(A))

내장함수 사용 버전

아래부터 1,2,3..

 

2562. 최댓값

여러 줄로 되어있는 정수를 list화 하는 방법 두개

import sys
nlist = [sys.stdin.readline().strip() for i in range(9)] #['11', '3', ..., '99']
nlist = list(map(int,nlist)) #str->int map->list 변환. [11, 3, ..., 99]

nlist=[]
for _ in range(9):
	i = int(input())
    nlist.append(i)

nlist = [int(input()) for _ in range(9)] #comprehension형
print(max(nlist))
print(nlist.index(max(nlist))+1)

print(max(nlist), nlist.index(max(nlist))+1, sep="\n")

3052. 나머지

a = []
for _ in range(10):
    i = int(input())
    a.append(i%42)
b = set(a) #집합 형태 사용해야 중복x
print(len(b))
a = set()
for _ in range(10):
    i = int(input())
    a.add(i%42)
print(len(a))

아예 set으로 계산.

 

1546. 평균

import sys
N = int(input())
score = list(map(int,sys.stdin.readline().split()))
M = max(score)
summ = 0
for s in score:
    summ += s
avg = summ/N
newavg = avg / M * 100
print(newavg)

 

8958. OX퀴즈

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

import sys
N = int(input())
for _ in range(N):
    k = input()
    A = list(k)
    lenA = len(A)
    s = 0
    score = 0
    for i in range(1,lenA):
        if A[i] == "O":
            score += 1 #이걸 else위에 쓰면 답이 안나오는데 이유는?
            if A[i]==A[i-1]:
                s += 1
                score += s
            else:
                continue
        else:
            s = 0
    if A[0] == "O":
        score += 1
    print(score)
n = int(input())
for _ in range(n):
    A = list(input())
    s = 0  
    score = 0
    for i in A:
        if i == 'O':
            s += 1  # 'O'가 연속되면 점수가 1점씩 커진다.
            score += s  # score = score + s
        else:
            s = 0
    print(score)

X 가 나오면 s=0이 되므로 A[i]==A[i-1] 로 연속 여부를 판단할 필요가 없다.. s값이 누적될테니까.

모범답안 보면 자괴감 ㅠㅠ

 

4344. 평균은 넘겠지

C = int(input())
for _ in range(C):
    Case = list(map(int,input().split()))
    N = Case[0]
    
    sum_Case = sum(Case, start = N*(-1))
    sum_Case = sum(Case) - N
    sum_Case = sum(Case[1:])
    
    avg_Case = sum_Case / N
    num_stu = 0
    for score in Case[1:]:  #Case[0] 빼기
        if score > avg_Case:
            num_stu += 1
    rate = num_stu/N*100
    
    print('{:.3f}%'.format(rate))
    print(f'{rate:.3f}%') #이거 두개는 거의 같은거
    
    print('%.3f'%rate,'%',sep='') #format대신 %f 사용. %s=str, %d=decimal, %f=fixed point

마지막 소수점 세자리 표현이 제일 어려웠음.

'파이썬 & 엑셀 > 파이썬' 카테고리의 다른 글

[파이썬]백준 단계별7 -문자열  (0) 2022.02.06
[파이썬]백준 단계별6 -함수  (0) 2022.02.03
[파이썬]백준 단계별4-while문  (0) 2022.02.01
[파이썬] 실행  (0) 2022.02.01
[파이썬]백준 단계별3-for문  (0) 2022.02.01

+ Recent posts