83. 이전문제와 같이 문제 내용이 참 깁니다....

이전 문제는 PCM방식의 음성 녹음에 대한 기초 상식

이번 문제는 BPM방식의 사진 저장에 대한 기초 상식을 담고있으니

문제를 한번씩 읽어보셔도 나쁠것없을듯싶네요

 

입력: h, w, b 가 공백을 두고 입력됨

입력 범위: 자연수, 최대값 h, w, b : 1024, 1024, 40

출력: 소수점 2째 자리에서 반올림, 단위 MB 출력

입력 예시

1024 768 24

출력 예시

2.25 MB

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int w = scan.nextInt();
		int h = scan.nextInt();
		int b = scan.nextInt();
		scan.close();
		
		long middle = 1;
		//middle = h * b * c * s;
		middle *= h;
		middle *= w;
		middle *= b;
		
		double result = middle/8;
		result /= (1024 * 1024);
		System.out.println(String.format("%.2f MB", result));
	}
}

Swift 4.2

import Foundation

if let line = readLine(){
    let valueArray = line.split(separator: " ")
    if valueArray.count == 3,
        let h = Int(valueArray.first!),
        let w = Int(valueArray[1]),
        let b = Int(valueArray[2])
    {
        let middle = h * w * b
        let result = Double(middle) / 8 / 1024 / 1024
        print(String.init(format: "%.2f MB", result))
    }
}

이번 문제의 소스를 살짝 수정하였습니다.

이번 문제도 마찬가지로 세 수를 곱하고 8, 1024, 1024 로 나누는 문제입니다.

https://codeup.kr/problem.php?id=1086

82. 뭐라 요약해야할지 모르겠으니 원본링크의 문제를 확인바랍니다.

입력: h, b, c ,s 가 공백을 두고 입력됨

입력 범위: 자연수, 최대값 h, b, c ,s : 48000, 32, 5, 6000

출력: 소수점 2째 자리에서 반올림, 단위 MB 출력

입력 예시

44100 16 2 10

출력 예시

1.7 MB

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int h = scan.nextInt();
		int b = scan.nextInt();
		int c = scan.nextInt();
		int s = scan.nextInt();
		scan.close();
		
		long middle = 1;
		//middle = h * b * c * s;
		middle *= h;
		middle *= b;
		middle *= c;
		middle *= s;
		
		double result = middle/8;
		result /= (1024 * 1024);
		System.out.println(String.format("%.1f MB", result));
	}
}

 

Swift 4.2

import Foundation

if let line = readLine(){
    let valueArray = line.split(separator: " ")
    if valueArray.count == 4,
        let h = Int(valueArray.first!),
        let b = Int(valueArray[1]),
        let c = Int(valueArray[2]),
        let s = Int(valueArray[3])
    {
        let middle = h * b * c * s
        let result = Double(middle) / 8 / 1024 / 1024
        print(String.init(format: "%.1f MB", result))
    }
}

 

이번 문제는 엄청긴데 결국 네 수를 곱하고 8로 1024로 또 1024로 나누는 문젭니다.

중간 결과값이 Int 범위를 넘어서기에 이제 공부시작하시는 분들은 int로 그냥 처리하다가 값이 -값이 나오는일이 비일비재할문제일거같습니다.

물논~!

스위프트에서는 Int값 범위가 매우 넓기에 그냥! Int로 처리하시면됩니다.

사실 코드업에서 이러한 문제에 대해 물어보는걸 귀찮아하는건지 입력가능한 최고값을 입력시 잘못나오는거에대한 테스트케이스가 없는거같습니다.

자바코드쪽의 주석친 한부분이 int형으로 된 곱셈을 int형끼리 곱하고 long에 넣기때문에 문제 생겨야하는데 사이트에서는 문제없다고 평을 내리더군요;;

따로 안돌려봤으면 그냥 아마 주석친부분으로 포스트했을거같네요

https://codeup.kr/problem.php?id=1085

 

[기초-종합] 소리 파일 저장용량 계산하기(설명)

소리가 컴퓨터에 저장될 때에는 디지털 데이터화 되어 저장된다. 마이크를 통해 1초에 적게는 수십 번, 많게는 수만 번 소리의 강약을 체크해 그 값을 정수값으로 바꾸고, 그 값을 저장해 소리를

codeup.kr

 

pickerView는 label이나 button처럼 손쉽게 텍스트에 대한 접근을 할 수 없다.

생긴것부터가 배열이니 배열 전체에 대해 어떻게 해줄까를 정해줘야되서 그렇게 해둔듯 하다.

그러한 부분을 어떻게 할지를 정하는 함수가 pickerview에는 있다.

 

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString?

 

라는 함수 인데

텍스트를 그냥 넣어 줄때 사용하는 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?

와 사용이 비슷하다.

 

아래는 빨간색으로 변경하는 예시를 플레이그라운드에서 만들어 보았다.

텍스트 설정을 변경하는 키값이 상당히 많은데 그중에서도

foregroundColor

를 사용했다.

 

위 소스를 플레이그라운드에서 돌리면 아래와 같이 나온다.

 

아래는 키들에 대한 애플문서이다.

https://developer.apple.com/documentation/foundation/nsattributedstring/key

 

Apple Developer Documentation

 

developer.apple.com

 

'iOS > swift' 카테고리의 다른 글

KeyboardObserver~  (0) 2021.10.19
Guide Swift Programming Language 5.5  (0) 2021.10.01
프로그래머스 - 프린터  (0) 2021.05.06
프로그래머스 - 기능개발  (0) 2021.05.05
프로그래머스 - 모의고사  (0) 2021.05.04

81. 콘솔에서 세 개의 정수( r, g, b )를 입력받고 세 수의 조합을 출력하고, 조합의 수를 출력하라.

입력 범위 : 0 ~ 128

출력:

0 ~ r-1, 0 ~ g-1, 0 ~ b-1 까지의 수의 조합을 모두 출력하고, 조합의 수를 출력

단, 출력할때는 오름차순으로 출력한다.

입력 예시

2 2 2

출력 예시

0 0 0

0 0 1

0 1 0

0 1 1

1 0 0

1 0 1

1 1 0

1 1 1

8

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int rColorMax = scan.nextInt();
		int gColorMax = scan.nextInt();
		int bColorMax = scan.nextInt();
		scan.close();
		
		int count = 0;
		for (int r = 0; r < rColorMax; r++) {
			for (int g = 0; g < gColorMax; g++) {
				for (int b = 0; b < bColorMax; b++) {
					System.out.println(r + " " + g + " " + b);
					count++;
				}
			}
		}
		System.out.println(count);
	}
}

Swift 4.2

import Foundation

if let line = readLine(){
    let valueArray = line.split(separator: " ")
    if valueArray.count == 3,
        let rColorMax = Int(valueArray.first!),
        let gColorMax = Int(valueArray[1]),
        let bColorMax = Int(valueArray[2])
    {
        var count = 0
        for r in 0 ..< rColorMax {
            for g in 0 ..< gColorMax {
                for b in 0 ..< bColorMax {
                    print("\(r) \(g) \(b)")
                    count += 1
                }//for:bColor
            }//for:gColor
        }//for:rColor
        print(count)
    }
}

이전 1081항 문제소스에서 살짝 수정했습니다.

https://codeup.kr/problem.php?id=1084

 

 

80. 콘솔에서 정수 하나를 입력받고 1부터 그 수까지 출력하라. 단 369게임에 해당하는 수는 X로 대신한다.

입력 범위 : 1 ~ 10

입력 예시

9

출력 예시

1 2 X 4 5 X 7 8 X

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int endNum = scan.nextInt();
		scan.close();
		
		for (int i = 1; i <= endNum; i++) {
			if(i%3 == 0 ) {
				System.out.print("X ");
			} else {
				System.out.print(i+" ");
			}
		}
	}
}

Swift 4.2

import Foundation

if let line = readLine(), let endNum = Int(line){
    for i in 1...endNum {
        if i % 3 == 0 { print("X", separator: " ", terminator: " ") }
        else { print(i, separator: " ", terminator: " ") }
    }
}

자바소스를 코드업에서 검사받을때 println으로 출력한것을 버튼 누르고 봐서 아차! 했는데

ok해주네요.

출력형식과 다른모양이건만...

스위프트에선 println 이 따로 없습니다.

print 구문은

print( 프린트할 여러 변수 , separator: , terminator: ) 로 구성되어있는데

separator 는 프린트할 변수 란에 여러개를 넣을경우에만 사용되고 하나만 넣을땐 있으나 마나입니다.

예를 들어 print("제가","바로","이렙니다", separator: "!", terminator:"") 로 해줄경우

출력이 제가!바로!이렙니다 로 나오게됩니다.

각 변수끼리의 구분을 뭘로 할꺼냐? 를 정하는녀석이죠.

그리고 뒤의 terminator는 끝날때 뭐를 붙일지 정하는 녀석입니다.

디폴트로 다음라인으로 넘어가게 되어있는지 print()만 입력시 바로 다음라인으로 가지요.

위에 예제를 다시 써보자면

print("제가","바로","이렙니다", separator: "!", terminator:"~~~~")

로입력시

출력은 제가!바로!이렙니다~~~~ 로 나오게됩니다.

콘솔에 출력하는걸 신경써야할일이 올지는 모르겠습니다만

알아두면 좋을듯싶습니다.

https://codeup.kr/problem.php?id=1083

79. 16진수로 된 구구단을 출력하려고 한다.

콘솔에서 영문자 하나를 입력받고, 맞는 단의 구구단을 출력하라.

입력 범위 : A ~ F

출력 : 모든 수는 16진수 대문자형식으로 출력

입력 예시

B

출력 예시

B*1=B

B*2=16

B*3=21

B*4=2C

B*5=37

B*6=42

B*7=4D

B*8=58

B*9=63

B*A=6E

B*B=79

B*C=84

B*D=8F

B*E=9A

B*F=A5

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		char floor = scan.next().charAt(0);
		scan.close();
		switch (floor) {
		case 'A':
			printGuGuDan(10);
			break;
		case 'B':
			printGuGuDan(11);
			break;
		case 'C':
			printGuGuDan(12);
			break;
		case 'D':
			printGuGuDan(13);
			break;
		case 'E':
			printGuGuDan(14);
			break;
		case 'F':
			printGuGuDan(15);
			break;
		default:
			break;
		}
	}
	static void printGuGuDan(int floor) {
		String strFloor = String.format("%X", floor);
		for (int i = 1; i < 16; i++) {
			int calc = i * floor;
			System.out.println(String.format("%X*%X=%X", floor,i,calc));
		}
	}
}

 

Swift 4.2

import Foundation

func printGuGuDan(floor:Int) {
    for i in 1...15 {
        let calc = i * floor
        print(String.init(format: "%X*%X=%X", floor, i, calc))
    }
}
if let line = readLine(), let floor = line.split(separator: " ").first{
    switch floor {
    case "A":
        printGuGuDan(floor: 10)
    case "B":
        printGuGuDan(floor: 11)
    case "C":
        printGuGuDan(floor: 12)
    case "D":
        printGuGuDan(floor: 13)
    case "E":
        printGuGuDan(floor: 14)
    case "F":
        printGuGuDan(floor: 15)
    default:break
    }
}

 

A ~ F 입력받은 수를 10진수로 어떻게 변환할까 고민하다가 귀찮아져서

그냥 스위치문로 일일이 넣어줬습니다

이글을 보시는분은 더 좋은 방법을 떠올릴시거라고 생각됩니다.

https://codeup.kr/problem.php?id=1082

 

 

78. 콘솔에서 두 정수( n, m )를 입력받는다. 각 수는 두 주사위의 가장 큰 값이다

( 주사위 1: 1 ~ n, 주사위 2: 1 ~ m) 두 주사위를 던질때 나올 수 있는 모든 경우의 수를 출력하라.​

입력 : 1Line 에 n,m이 공백을 두고 입력된다.

입력 범위 : 1 ~ 10

입력 예시

2 3

출력 예시

1 1

1 2

1 3

2 1

2 2

2 3

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int firstStopCount = scan.nextInt();
		int secondStopCount = scan.nextInt();
		scan.close();
		
		for (int first = 1; first <= firstStopCount; first++) {
			for (int second = 1; second <= secondStopCount; second++) {
				System.out.println(first + " " + second);
			}
		}
	}
}

Swift 4.2

import Foundation

if let line = readLine(){
    let valueArray = line.split(separator: " ")
    if valueArray.count == 2, let firstStopNum = Int(valueArray.first!), let secondStopNum = Int(valueArray[1]) {
        for first in 1...firstStopNum {
            for second in 1...secondStopNum {
                print("\(first) \(second)")
            }
        }
    }
}

 

 

문제를 읽기 시작했을때 쫄았습니다;;

주사위 라고 해서 정 4면체이든 6면체이든 주사위로서 존재 가능한(던질때 모든면이 나올 확률이 같은) 것에 대해 경우의 수를 뽑는줄알고요...

이과생이지만 수학에 약한 저로서는 여태 문법문제만 나와서 쉬엄쉬엄 타이핑 연습하듯이 놀고 있다가 어퍼컷맞은 기분이였어요.

그리고 밑의 입출력 읽고 안도의 숨을 내쉬었습니다.

그런문제가 아니였어요!

그냥 두수 받고 이중 반복문 돌리는 문제였습니다.

허탈...

https://codeup.kr/problem.php?id=1081

 

 

77. 콘솔에서 정수 하나를 입력받는다.

값이 0인 변수 x에 입력받은 정수보다 크거나 같을때 까지 1 + 2 + 3 + ... 한다했을때

마지막에 x 에 더해지는 값을 출력하시오.

입력 범위 : 0 ~ 1000

입력 예시

55

출력 예시

10

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int stopNum = scan.nextInt();
		scan.close();
		
		int totalValue = 0;
		int addValue = 0;
		while(totalValue < stopNum) totalValue += ++addValue;
		System.out.println(addValue);
	}
}

Swift 4.2

import Foundation

if let line = readLine(),let stopNum = Int(line) {
    var totalValue = 0
    var addValue = 0
    while totalValue < stopNum {
        addValue += 1
        totalValue += addValue
    }
    print(addValue)
}

 ​

https://codeup.kr/problem.php?id=1080

 

 

+ Recent posts